【问题标题】:python subprocess.Popen error in linuxlinux中的python subprocess.Popen错误
【发布时间】:2014-03-13 11:55:23
【问题描述】:

我现在使用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的内容,然后在命令行中运行,那么可执行程序就可以运行了。有任何想法吗?谢谢。

【问题讨论】:

  • run_demo 是脚本文件吗?在这种情况下,命令将是 cmd = '../.././run_demo'
  • @DOOM 你不需要./
  • 当你运行它时你的工作目录是什么?当您在该工作目录中时,../../run_demo 是否在 shell 中工作?
  • @DOOM 感谢 cmets。 run_demo 是一个可执行程序(用c++编写,用g++编译)

标签: python linux


【解决方案1】:

好吧,正如错误所说:

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)

取决于您是否要将其嵌入到外壳中。

注意:不管脚本是否确实在您提供的路径中,您说您正在 linux 和 windows 之间制作一个“便携式”应用程序,所以您肯定需要使用os.path.join()

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多