带参数调用程序

2 投票
4 回答
7732 浏览
提问于 2025-04-16 01:43

我想要启动一个Python文件(.py),并传入一些参数,然后在它完成后获取输出。我听说过“popen”和“subprocess.call”,但我找不到关于如何使用它们的教程。

有没有人知道好的教程推荐?

4 个回答

1

runme.py 是一个 Python 文件,通常用来执行一些代码。

print 'catch me'

main.py 是另一个 Python 文件,里面可能包含了程序的主要逻辑或功能。

import sys
from StringIO import StringIO

new_out = StringIO()
old_out = sys.stdout
sys.stdout = new_out

import runme

sys.stdout = old_out

new_out.seek(0)
print new_out.read()

还有其他内容...

$ python main.py 
catch me
5

我想要用参数启动一个Python文件(.py),并在它完成后获取输出。

步骤1. 不要使用 subprocess。这样做是不对的。

步骤2. 找到你想运行的Python文件,假设它叫 runme.py

步骤3. 再看一遍这个文件。如果写得不错,里面会有一段代码是 if __name__ == "__main__": 开头的。接下来就是这个文件的“外部接口”。因为你没有提供具体信息,我假设它看起来像这样。

if __name__ == "__main__":
    main()

步骤4. 查看被调用脚本中调用的“主”函数。由于你没有提供信息,我假设它看起来像这样。

def main():
    options, args = parse_options()
    for name in args:
        process( options, file )

继续阅读,确保你理解 parse_optionsprocess 是怎么工作的。我假设 parse_options 使用了 optparse

步骤5. 编写你的“调用”脚本。

 import runme
 import sys
 import optparse
 options = options= optparse.Values({'this':'that','option':'arg','flag':True})
 with open( "theoutput.out", "w" ) as results:
     sys.stdout= results
     for name in ('some', 'list', 'of', 'arguments' ):
         runme.process( options, name )

这才是从Python内部运行Python文件的正确方法。

真正搞清楚你想运行的东西的接口,然后去运行它。

6

你不需要那些东西;只需像下面这样运行你的文件,给它传递参数:

./main.py arg1 arg2 arg3 >some_file

(为了这样做,你的文件开头必须有类似 #!/usr/bin/env python 的内容)

使用 sys 模块,你可以访问这些参数:

arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]

撰写回答