在Python中运行Bash命令

在我的本地机器上,我运行一个包含这一行的python脚本

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt" os.system(bashCommand) 

这工作正常。

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

 '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()运行之前在terminal打印我的命令。

当然,我再次得到错误(由os.system(bashCommand)引起),但在该错误之前,它在terminal打印命令。 然后,我只是复制该输出,并做了复制粘贴到terminal,并按Enter键,它的工作原理…

有没有人有线索怎么回事:(?

不要使用os.system 。 它已被贬值赞成subprocess。 从文档 :“这个模块打算取代几个较旧的模块和function: os.systemos.spawn ”。

就像你的情况一样:

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

用subprocess调用它

 import subprocess subprocess.Popen("cwm --rdf test.rdf --ntriples > test.nt") 

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

你可以使用bash程序,用参数-c来执行命令:

 bashCommand = "cwm --rdf test.rdf --ntriples > test.nt" output = subprocess.check_output(['bash','-c', bashCommand]) 

根据错误,您在服务器上缺less名为交换的软件包。 这个/usr/bin/cwm需要它。 如果您在Ubuntu / Debian上,请使用aptitude安装python-swap

你可以使用'subprocess',但是我总觉得这不是'Pythonic'的做法。 所以我创build了Sultan(无耻的插件),可以很容易的运行命令行function。

https://github.com/aeroxis/sultan