在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.system
, os.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。