【问题标题】:passing argument from python to subprocess.popen将参数从 python 传递给 subprocess.popen
【发布时间】:2017-02-18 00:05:55
【问题描述】:

我有这个代码:

from subprocess import Popen
link="abc"
theproc = Popen([sys.executable, "p1.py",link])

我想将变量“链接”发送到 p1.py, p1.py 会打印出来。

类似的东西。这里是 p1.py:

print "in p1.py link is "+ link

我该怎么做?

【问题讨论】:

  • print "在 p1.py 中的链接是 "+ 链接 - 这是 p1.py

标签: python subprocess popen


【解决方案1】:

我假设 python 指的是您系统上的 Python 2.x。

使用sys.argv 检索p1.py 中的命令行参数:

import sys

if not len(sys.argv) > 1:
    print "Expecting link argument."
else:
    print "in p1.py link is " + sys.argv[1]

如果您只想调用程序并检索其输出,则有一个函数subprocess.check_output 更易于使用:

from subprocess import check_output

output = check_output(["python", "p1.py", "SOME_URL"])
print "p1.py returned the following output:\n'{}'".format(output)

示例输出:

$ python call_p1.py
p1.py returned the following output:
'in p1.py link is SOME_URL
'

【讨论】:

  • 如果我想发送 2 个参数,我该怎么做?
  • 只需将更多元素添加到传递给check_output 的列表中。至于在p1.py 中检索它们,sys.argv 是一个包含程序启动名称及其参数的列表,所以sys.argv[1] 是第一个参数,sys.argv[2] 第二个等等。
  • @shirastenmetz 如果您满意,请接受我的回答。
【解决方案2】:

您必须解析 p1.py 中的命令行参数才能将其放入变量中:

import sys
try:
    link = sys.argv[1]
except IndexError:
    print 'argument missing'
    sys.exit(1)

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2013-12-07
    • 2018-01-11
    • 2019-05-30
    相关资源
    最近更新 更多