从python运行另一个程序

She*_*enj 2 python sys

我想从python代码中多次调用一个程序,并将该程序的输出保存在文本文件中.我现在的第一个问题就是调用其他代码.我必须重定向到另一个目录并在output.txt上调用./rank.这就是我试图这样做的方式:

    TheCommand = "~/src/rank-8-9-2011/rank output.txt"
    os.system(TheCommand)
Run Code Online (Sandbox Code Playgroud)

但我得到一个解析错误.

 [Parsing error on line ]Unknown error: 0
Run Code Online (Sandbox Code Playgroud)

我在Mac OS 10.5.8上运行python2.7.我不知道问题是什么.我也尝试过使用子进程:

 subprocess.call(["~/src/rank-8-9-2011/rank", "output.txt"])
Run Code Online (Sandbox Code Playgroud)

这找不到目录(我感觉我错误地使用了子进程),但我不知道os.system有什么问题.

Dan*_* D. 5

第一个参数中的程序名称subprocess.Popen必须不包含,~因为它不会将字符串传递给shell进行处理(就像在sql中始终使用参数化查询一样,保护字符串注入攻击,例如,如果不是output.text一个;rm -rf /,系统版本将运行rank然后运行,rm -rf .subprocess.Popen只会rank打开一个名为的文件;rm -rf .),所以应该通过调用来扩展它os.path.expanduser:

subprocess.Popen([os.path.expanduser('~/src/rank-8-9-2011/rank'), "output.txt"])
Run Code Online (Sandbox Code Playgroud)

虽然可以通过传递来打开shell处理shell=True,但不建议出于上述原因.