在我的本地计算机上,我运行一个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()
运行命令之前,它会打印出我的命令。
当然,我又得到了这个错误(由os.system(bashCommand)
引起),但是在出现这个错误之前,它会在终端中打印命令。然后我只需复制输出并将其复制粘贴到终端中,然后按enter键,它就可以工作了……
有人知道这是怎么回事吗?
发布于 2010-11-23 20:44:23
不要使用os.system
。它已被弃用,转而支持subprocess。在docs中:“此模块打算替换几个较旧的模块和函数:os.system
、os.spawn
”。
就像你的例子:
import subprocess
bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
发布于 2010-11-23 20:43:27
使用子进程调用它
import subprocess
subprocess.Popen("cwm --rdf test.rdf --ntriples > test.nt")
您得到的错误似乎是因为服务器上没有交换模块,您应该在服务器上安装交换模块,然后再次运行脚本
发布于 2016-09-01 23:00:33
你可以使用subprocess
,但我一直觉得这不是一种'Pythonic‘式的方式。因此,我创建了Sultan (不知羞耻的插件),它使得运行命令行函数变得很容易。
https://stackoverflow.com/questions/4256107
复制相似问题