【问题标题】:How to use multiple variables in "subprocess.run" function? [duplicate]如何在“subprocess.run”函数中使用多个变量? [复制]
【发布时间】:2019-08-29 08:28:25
【问题描述】:

我有一个小的 python3 代码。 我想在 subprocess.run 中使用多个变量

import subprocess

scripts_home='/usr/local/bin'
script_argument = 'argument'

def function():
    subprocess.run("script_home/script.sh %s" % script_argument, shell=True, capture_output=True).stdout

如何在命令中使用 script_home 变量?

我已经尝试过了:

subprocess.run("%s/script.sh %s" % script_home % script_argument, shell=True, capture_output=True).stdout
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

【问题讨论】:

  • '%s some string %s' % (s1, s2)。但是使用 f-strings 或 .format()!

标签: python python-3.x variables subprocess


【解决方案1】:

您的实现中的字符串说明符不正确。

试试下面这行:

subprocess.run("{script_home}/script.sh {script_args}".format(script_home=script_home, script_args=script_argument), shell=True, capture_output=True).stdout

【讨论】:

  • 感谢您的回答,成功了!
【解决方案2】:

您希望将参数作为列表传递。

import subprocess

scripts_home='/usr/local/bin'
script_argument = 'argument'

def function():
    return subprocess.run(
        [f"{script_home}/script.sh", script_argument],
        capture_output=True).stdout

请注意 shell=True 在此更改后如何不再必要或有用(或正确)。

另见Actual meaning of 'shell=True' in subprocess

(我猜你忘记了前面的return。没有它,你的函数只会返回None。)

这里有很多不同的方法来产生第一个字符串。

script_home + '/script.sh'     # string addition is pretty inefficient and ugly
'%s/script.sh' % script_home   # legacy Python 2.x, fugly %
'{0}/script.sh'.format(script_home)
f'{script_home}/script.sh'     # f-string, Python 3.6+

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多