subprocess.call说没有这样的文件或目录,但是os.path.isfile说有

时间:2015-09-18 20:23:08

标签: python subprocess

我有一个可执行文件,我想从Python运行。我定义了一个指向它的路径变量:

>>> path = '/root/Cognos/Cognos/linuxi38664h/issetupnx'

我确认我实际上指的是文件而不是目录:

>>> from os.path import isdir, isfile
>>> isdir(path)
False
>>> isfile(path)
True

但是一旦我尝试通过subprocess.call ...

运行可执行文件
>>> from subprocess import call
>>> call([path])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

它告诉我文件现在不存在。

我能想到的唯一可能性是,可执行文件本身可能正在被发现并且运行良好,但是可执行文件失败了说它找不到它需要的东西(什么?)。我不确定如何测试这个理论,不过......或者即使它是可能的。

另一种可能性是某种权限问题?虽然我无法想到为什么我有适当的权限来查看该文件,但是当我尝试运行它时,我突然无法看到它。

2 个答案:

答案 0 :(得分:0)

以root身份执行此代码:

import subprocess as sp

path = '/root/Cognos/Cognos/linuxi38664h/issetupnx'

proc = sp.Popen([path],stdin=sp.PIPE)

proc.communicate()

答案 1 :(得分:0)

我应该使用call而不是check_output。然后,错误会包含打印到stdoutstderr的所有邮件。

path = '/root/Cognos/Cognos/linuxi38664h/issetupnx'

from subprocess import check_output
check_output([path])

然后我会得到一个更详细的消息,说明它如何加载共享库失败。