从python发送任意数量的输入到.exe

时间:2009-09-10 23:48:56

标签: python executable


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

4 个答案:

答案 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)

这会使您的字符串更长,但会保留列表中各个元素的完整性。