代码之家  ›  专栏  ›  技术社区  ›  Internet man

从Python添加路径和调用外部程序时出现问题

  •  4
  • Internet man  · 技术社区  · 14 年前

    我在“/home/myname/mydir/”中有一个名为“foo”的可执行文件,我正试图从Python中调用它,但我在这里做了一些基本的错误操作。你能帮助我吗?

    import os, sys
    sys.path.append("/home/myname/mydir/")
    os.system("foo") # os.system("./foo") doesn't work either
    

    谢谢

    2 回复  |  直到 14 年前
        1
  •  15
  •   unbeli    14 年前

    sys.path 是Python库的路径,而不是搜索二进制文件的系统路径。尝试改变 os.environ['PATH'] 相反。

    >>> sys.path.append("/opt/local/bin")
    >>> os.system("wget")
    sh: wget: command not found
    32512
    >>> os.environ['PATH'] += os.pathsep + '/opt/local/bin'
    >>> os.system("wget")
    wget: missing URL
    
        2
  •  3
  •   user25148 user25148    14 年前

    你会想用 subprocess 模块而不是 os.system ,任何严重的事情。为了 ,请执行以下操作:

    os.system('/home/myname/mydir/foo ')
    

    子流程 :

    p = subprocess.Popen(['/home/myname/mydir/foo'])
    p.communicate('')
    if p.returncode != 0:
        raise Exception('foo failed')
    

    如果您关心foo的argv[0]是'foo'而不是'/home/myname/mydir/foo',请执行以下操作:

    p = subprocess.Popen(['foo'], executable='/home/myname/mydir/foo')
    

    原因是什么 比以前好多了 它提供了对参数列表更好的控制:它不需要shell解析命令行,并且避免了一系列潜在的安全问题,特别是用户提供的文件名等。另一个原因是