p = subprocess.Popen(args = "myprog.exe" + " " +
str(input1) + " " +
str(input2) + " " +
str(input3) + " " +
strpoints, stdout = subprocess.PIPE)
在上面的代码中,input1,input2和input3都是转换为字符串的整数。变量“strpoints”是任意长度的字符串列表。 input1告诉myprog strpoints的长度。当然,当我尝试运行上面的代码时,我收到以下错误消息:
TypeError:无法将'list'对象隐式转换为str
如何将strpoints的所有元素传递给myprog.exe?我注定要做str(strpoints)然后让myprog.exe解析这个逗号,撇号等?如,
`>>> x = ['a','b']
`>>> STR(x)的
“['a','b']”
或者我应该提前创建一个巨大的字符串?如,
'>>> x = ['a','b']
'>>>字符串化(x)的
'a b'
其中stringify会是这样的
def stringify(strlist):
rlist = ""
for i in strlist:
rlist = rlist + i + " "
return rlist
答案 0 :(得分:7)
args可以是一个序列:
p = subprocess.Popen(args = ["myprog.exe"] +
[str(x) for x in [input1,input2,input3]] +
strpoints,stdout = subprocess.PIPE)
如果您的参数包含shell元字符,则更正确'*你并不希望它们被解释为这样。
答案 1 :(得分:4)
尝试使用string.join:
p = subprocess.Popen(args = "myprog.exe" + " " +
str(input1) + " " +
str(input2) + " " +
str(input3) + " " +
" ".join(strpoints), stdout = subprocess.PIPE)
答案 2 :(得分:1)
避免使用该字符串将所有参数连接成一个字符串。
传递参数的序列(列表或元组)会更简单,更简单,更安全。如果任何参数包含空格字符(这对于文件名很常见),则尤其如此。
答案 3 :(得分:0)
有人认为你可能想把这些字符串括在引号中,以防它们有嵌入空格吗?类似的东西:
if strpoints:
finalargs = '"' + '" "'.join(strpoints) + '"'
else:
finalargs = ""
p = subprocess.Popen(args = "myprog.exe" + " " +
str(input1) + " " +
str(input2) + " " +
str(input3) + " " +
finalargs, stdout = subprocess.PIPE)
这会使您的字符串更长,但会保留列表中各个元素的完整性。