代码之家  ›  专栏  ›  技术社区  ›  ArtOfWarfare

子流程。调用表示没有这样的文件或目录,而是os.path。isfile说有

  •  2
  • ArtOfWarfare  · 技术社区  · 9 年前

    我有一个要从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 回复  |  直到 9 年前
        1
  •  0
  •   ArtOfWarfare    9 年前

    而不是使用 call ,我应该用 check_output 。那么错误将包括打印到 stdout stderr .

    path = '/root/Cognos/Cognos/linuxi38664h/issetupnx'
    
    from subprocess import check_output
    check_output([path])
    

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

        2
  •  0
  •   Najeeb Choudhary    9 年前

    以root身份执行以下代码:

    import subprocess as sp
    
    path = '/root/Cognos/Cognos/linuxi38664h/issetupnx'
    
    proc = sp.Popen([path],stdin=sp.PIPE)
    
    proc.communicate()