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

问题描述 投票:0回答:2

我正在构建一个与Windows 10通信的简单远程shell工具。服务器通过自己的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”)连接到列表

python subprocess popen
2个回答
0
投票

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

在这种情况下,您似乎想要使用给定的参数运行app.exe;那很简单

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

0
投票

@chepner先生,你是一个非常有帮助的人。就是这样!我很高兴,谢谢你的帮助。

你的解决方案

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

那是獾!

© www.soinside.com 2019 - 2024. All rights reserved.