linux中的python subprocess.Popen错误

时间:2014-03-13 11:55:24

标签: python linux

我现在正在使用Python来运行由我自己开发的命令行可执行程序:

import subprocess
cmd = '../../run_demo'
print cmd
subprocess.Popen(cmd)

此脚本在Windows中运行良好。但是,它在linux上运行,给出了以下错误:

Traceback:
  File "script.py", line 6, in <module>
     subprocess.Popen(cmd)
  File "/user/lib/python2.5/subprocess.py", line 623, in _init_
     erread, errwrite)
  File "/user/lib/python2.6/subprocess.py", line 1141, in _execute_child
     raise child_exception
  OSError: [Errno 2] No such file or directory

由于可执行命令在脚本print cmd中打印,如果我复制cmd的内容,然后在命令行中运行,则可执行程序可以运行。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:2)

好吧,正如错误所说:

  

OSError:[Errno 2]没有这样的文件或目录

在您提供的路径中没有'../../run_demo'这样的文件。我的赌注是你试图调用相对于脚本路径的脚本,而它相对于你从中运行它的路径。

首先,打印您在../..处获得的内容:

import os
print os.listdir('../../')

在那里,你会看到是否有run_demo

然后,打印当前脚本的路径:

pwd = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))

现在尝试使用从pwdrun_demo路径的相对路径,例如:

rundemo_exec = os.path.join(pwd,'..','..','run_demo')

最后,一旦您验证了所有这些,就要正确调用Popen

subprocess.Popen([rundemo_exec])

subprocess.Popen(rundemo_exec, shell=True)

取决于您是否要将其嵌入shell中。

N.B。:然而,剧本确实或不在你给予的道路上,你说你正在制作一个便携式的#34; linux和windows之间的应用程序,所以你肯定需要使用os.path.join()