从Python中添加path和调用外部程序的问题

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

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

谢谢

Solutions Collecting From Web of "从Python中添加path和调用外部程序的问题"

sys.path是Python库的路径,而不是系统PATH来搜索二进制文件。 尝试改变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 

你会想要使用subprocess os.system模块而不是os.system ,对于任何严重的事情。 对于os.system ,执行此操作:

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

对于subprocess

 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') 

subprocess os.systemos.system好得多的原因是它提供了对参数列表的更好的控制:它不需要命令行被shell解析,并且避免了一系列潜在的安全问题,特别是对于用户提供的文件名等。 另一个原因是subprocess提供了更好的错误处理,更好的重定向stdin,stdout和stderr。 (在上面的例子中没有显示)