构建python代码以通过subprocess.Popen运行消息

时间:2019-04-08 16:00:07

标签: python subprocess popen

我正在构建一个简单的远程Shell工具以与Windows 10通信。服务器通过其自己的Shell向运行消息的客户端发送“消息”。我需要此收到的消息由默认cmd(shell = True)-指定的app.exe之外的其他进程运行。这是在客户端上运行的代码: 1)

def work( storage, message ) :
    import subprocess   
    process = subprocess.Popen([message], stdout=subprocess.PIPE, stderr=None, shell=True)

    #Launch the shell command:
    output = process.communicate()

    print output[0]

我尝试包含“ app.exe”或“ cmd”来执行消息,但出现错误:TypeError:bufsize必须为整数。

我还尝试在本地查明问题,然后可以运行: 2)

import subprocess
import sys
subprocess.Popen(["C:\\Users\\User\\Desktop\\app.exe", "-switch"] + sys.argv[1:], shell=False)

并从命令终端传递参数,它可以正常工作。现在,我试图将相同的逻辑应用于程序的远程执行,并使用解决方案1或2。

更新: 3)尝试将我在本地所做的事情实施到远程解决方案中:

def work( storage, message ) :
    import subprocess
    import sys

    process = subprocess.Popen(["C:\\Users\\User\\Desktop\\app.exe", "-switch"] + sys.argv[1:], shell=False)

    #Launch the shell command:
    output = process.communicate()

    print output[0]

我尝试用消息替换sys.argv [1:],但得到: TypeError:只能将列表(而不是“ str”)连接到列表

2 个答案:

答案 0 :(得分:0)

shell=True并不意味着Popen的第一个参数是外壳程序的参数列表;它只是意味着第一个参数由外壳程序进行处理,而不是成为系统用来执行新进程的系统调用的参数。

在这种情况下,您似乎想使用给定的参数运行app.exe;就是这样

cmd = r"C:\Users\User\Desktop\app.exe"
subprocess.Popen([cmd, "-switch", message], stdout=subprocess.PIPE)

答案 1 :(得分:0)

@chepner先生,您非常有帮助。就是这样!非常高兴,谢谢您的帮助。

您的解决方案:

Popen(["...\\app.exe", "-switch", message], stdout=subprocess.PIPE, stderr=None)

那是the!