首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中运行Bash命令

在Python中运行Bash命令
EN

Stack Overflow用户
提问于 2010-11-23 20:38:09
回答 7查看 744.4K关注 0票数 386

在我的本地计算机上,我运行一个python脚本,其中包含以下代码行

代码语言:javascript
复制
bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
os.system(bashCommand)

这可以很好地工作。

然后,我在服务器上运行相同的代码,得到以下错误消息

代码语言:javascript
复制
'import site' failed; use -v for traceback
Traceback (most recent call last):
File "/usr/bin/cwm", line 48, in <module>
from swap import  diag
ImportError: No module named swap

所以我所做的就是在终端中插入一个print bashCommand,在它用os.system()运行命令之前,它会打印出我的命令。

当然,我又得到了这个错误(由os.system(bashCommand)引起),但是在出现这个错误之前,它会在终端中打印命令。然后我只需复制输出并将其复制粘贴到终端中,然后按enter键,它就可以工作了……

有人知道这是怎么回事吗?

EN

回答 7

Stack Overflow用户

发布于 2010-11-23 20:44:23

不要使用os.system。它已被弃用,转而支持subprocess。在docs中:“此模块打算替换几个较旧的模块和函数:os.systemos.spawn”。

就像你的例子:

代码语言:javascript
复制
import subprocess

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
票数 394
EN

Stack Overflow用户

发布于 2010-11-23 20:43:27

使用子进程调用它

代码语言:javascript
复制
import subprocess
subprocess.Popen("cwm --rdf test.rdf --ntriples > test.nt")

您得到的错误似乎是因为服务器上没有交换模块,您应该在服务器上安装交换模块,然后再次运行脚本

票数 47
EN

Stack Overflow用户

发布于 2016-09-01 23:00:33

你可以使用subprocess,但我一直觉得这不是一种'Pythonic‘式的方式。因此,我创建了Sultan (不知羞耻的插件),它使得运行命令行函数变得很容易。

https://github.com/aeroxis/sultan

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4256107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档