我有一个可执行文件,我想从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
它告诉我文件现在不存在。
我能想到的唯一可能性是,可执行文件本身可能正在被发现并且运行良好,但是可执行文件失败了说它找不到它需要的东西(什么?)。我不确定如何测试这个理论,不过......或者即使它是可能的。
另一种可能性是某种权限问题?虽然我无法想到为什么我有适当的权限来查看该文件,但是当我尝试运行它时,我突然无法看到它。
答案 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
。然后,错误会包含打印到stdout
和stderr
的所有邮件。
path = '/root/Cognos/Cognos/linuxi38664h/issetupnx'
from subprocess import check_output
check_output([path])
然后我会得到一个更详细的消息,说明它如何加载共享库失败。