Python: 多个参数作为单个参数传递?
Python: Multiple arguments being passed as a single argument?
我正在使用子进程来使用命令行并为另一个脚本传递参数。我有一个参数列表,我把它们变成了一个字符串:
import subprocess as sp
arg_list = ["arg1", "arg2", "arg3"]
arg_string = " ".join(arg_list)
现在这可以很好地处理以下输出 arg1 arg2 arg3
。问题是,当我将它传递给命令行时,它只将其识别为一个参数。
sp.call(["test_file.tcl", arg_string])
** 注意:我使用 call
只是因为这个脚本需要 Python 3.4
我知道这只是一个参数,因为将以下内容添加到 .tcl 文件中:
[lindex $argv 0]
[lindex $argv 1]
[lindex $argv 2]
输出为:
arg1 arg2 arg3
. (These are blank lines not dots)
.
这是正确的做法吗?我怎样才能使这项工作真正在 3 个参数而不是 1 个参数时得到识别?
** 答案:
添加 shell=True
允许传递字符串而不是列表。
sp.call("test_file.tcl {0}".format(arg_string), shell=True)
不要将 args_list
连接到字符串,然后使用 splat 运算符。这会将 ['test_file.tcl', 'arg1', 'arg2', 'arg3']
传递给 call
。
sp.call(["test_file.tcl", *arg_list])
根据您的 OS,您可能还需要通过 shell=True
。
我正在使用子进程来使用命令行并为另一个脚本传递参数。我有一个参数列表,我把它们变成了一个字符串:
import subprocess as sp
arg_list = ["arg1", "arg2", "arg3"]
arg_string = " ".join(arg_list)
现在这可以很好地处理以下输出 arg1 arg2 arg3
。问题是,当我将它传递给命令行时,它只将其识别为一个参数。
sp.call(["test_file.tcl", arg_string])
** 注意:我使用 call
只是因为这个脚本需要 Python 3.4
我知道这只是一个参数,因为将以下内容添加到 .tcl 文件中:
[lindex $argv 0]
[lindex $argv 1]
[lindex $argv 2]
输出为:
arg1 arg2 arg3
. (These are blank lines not dots)
.
这是正确的做法吗?我怎样才能使这项工作真正在 3 个参数而不是 1 个参数时得到识别?
** 答案:
添加 shell=True
允许传递字符串而不是列表。
sp.call("test_file.tcl {0}".format(arg_string), shell=True)
不要将 args_list
连接到字符串,然后使用 splat 运算符。这会将 ['test_file.tcl', 'arg1', 'arg2', 'arg3']
传递给 call
。
sp.call(["test_file.tcl", *arg_list])
根据您的 OS,您可能还需要通过 shell=True
。