【问题标题】:call program with arguments带参数调用程序
【发布时间】:2010-07-23 09:33:01
【问题描述】:

我想用参数启动一个 python 文件 (.py) 并在完成后接收它的输出。我已经听说过“popen”和“subprocess.call”,但我找不到任何教程如何使用它们

有人知道好的教程吗?

【问题讨论】:

  • subprocess和popen用于从python调用外部程序,如果你想从python调用python有更简单的方法。

标签: python python-3.x


【解决方案1】:

你不需要它们;只需将您的文件作为提供参数的程序启动,例如

./main.py arg1 arg2 arg3 >some_file

(因为您的文件必须以 #!/usr/bin/env python 之类的开头)

使用sys 模块您可以访问它们:

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

【讨论】:

  • 错过部分:完成后接收它的输出
  • > some_file 将输出通过管道传输到文件中,该文件肯定会接收输出。如果 OP 也希望在 stdout 上输出,只需将 > 替换为 tee
【解决方案2】:

我想用参数启动一个 python 文件 (.py) 并在完成后接收它的输出。

第 1 步。不要使用subprocess。你做错了。

第 2 步。读取要运行的 Python 文件。我们就叫它runme.py吧。

第 3 步。再读一遍。如果编写得当,有一段代码以if __name__ == "__main__": 开头。接下来是该文件的“外部接口”。由于您在问题中没有提供任何信息,我假设它看起来像这样。

if __name__ == "__main__":
    main()

步骤 4. 读取调用脚本调用的“main”函数。由于您没有提供任何信息,我假设它看起来像这样。

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 文件的正确方法。

实际上找出你要运行的东西的接口。并运行它。

【讨论】:

  • 我认为运行仅使用一种类型的参数。在这种情况下,我会将 input('Stopped') 放入 if 主代码或函数的分支进行处理,以确保哪个分支采用这种形式的参数。然后我会使用 print 打印出被调用函数的参数以及我想要使用的实际参数。之后,我将调用文件导入函数调用为: from otherfile import activity activity(printed_out_parameters....)
  • @Tony Veijalainen:非常聪明。我更喜欢阅读代码并理解它。但经验主义可以与软件一起使用。
  • 您的代码不起作用并且令人困惑。如果您能解释一下 runme 的流程,这将对我有很大帮助,因为我尝试设置您的代码但它失败了。你所做的看起来很聪明,但如果没有实际操作,我无法真正理解你做了什么。
【解决方案3】:

runme.py

print 'catch me'

ma​​in.py

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

【讨论】:

    【解决方案4】:

    除非您的意思是要从 Python 中启动 Python 文件?在这种情况下,它会更好:

    import nameOfPythonFile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多