我现在正在使用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
的内容,然后在命令行中运行,则可执行程序可以运行。有任何想法吗?谢谢。
答案 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))
现在尝试使用从pwd
到run_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()
。