构建 python 代码以通过子进程运行消息.波彭



我正在构建一个简单的远程shell工具来与Windows 10进行通信。服务器通过自己的 shell 向运行消息的客户端发送"消息"。我需要此收到的消息由默认cmd(shell=True(以外的其他进程运行 - 指定的应用程序.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"来执行消息,但出现错误:类型错误: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:],但我得到:类型错误:只能将列表(不是"str"(连接到列表

shell=True并不意味着

Popen的第一个参数是shell的参数列表;它只是意味着第一个参数由shell处理,而不是系统用来执行新进程的任何系统调用的参数。

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

cmd = r"C:UsersUserDesktopapp.exe"
subprocess.Popen([cmd, "-switch", message], stdout=subprocess.PIPE)

@chepner先生,您非常乐于助人。就是这样!我很高兴,谢谢你的帮助。

您的解决方案:

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

那是獾!

最新更新