从Python发送任意数量输入到.exe文件
p = subprocess.Popen(args = "myprog.exe" + " " +
str(input1) + " " +
str(input2) + " " +
str(input3) + " " +
strpoints, stdout = subprocess.PIPE)
在上面的代码中,input1、input2 和 input3 都是整数,它们会被转换成字符串。变量 "strpoints" 是一个长度不固定的字符串列表。input1 告诉 myprog 这个 strpoints 的长度。当然,当我尝试运行上面的代码时,我得到了以下错误信息:
类型错误:无法隐式将 'list' 对象转换为 str
我该如何将 strpoints 中的所有元素传递给 myprog.exe?难道我就只能先用 str(strpoints) 转换,然后让 myprog.exe 解析这个字符串中的逗号、引号等吗?例如:
`>>> x = ['a', 'b']
`>>> str(x)
"['a', 'b']"
还是说我应该提前创建一个很大的字符串?例如:
'>>> x = ['a', 'b']
'>>> stringify(x)
' a b'
这里的 stringify 可能是类似于
def stringify(strlist):
rlist = ""
for i in strlist:
rlist = rlist + i + " "
return rlist
的东西。
4 个回答
1
不要把所有的参数都拼接成一个字符串来使用。
直接传递一个参数的序列(比如列表或元组)会简单得多,也更好更安全。特别是当某个参数里包含空格时(这在文件名中很常见),这样做就更重要了。
7
args可以是一个序列:
p = subprocess.Popen(args = ["myprog.exe"] +
[str(x) for x in [input1,input2,input3]] +
strpoints,stdout = subprocess.PIPE)
如果你的参数中包含一些特殊字符,比如'*',而你又不想让它们被当作特殊字符处理,这样写会更正确。
4
试试用 string.join 方法:
p = subprocess.Popen(args = "myprog.exe" + " " +
str(input1) + " " +
str(input2) + " " +
str(input3) + " " +
" ".join(strpoints), stdout = subprocess.PIPE)