【问题标题】:Structuring python code to run a message through subprocess.Popen构建python代码以通过subprocess.Popen运行消息
【发布时间】:2019-08-29 20:05:27
【问题描述】:

我正在构建一个简单的远程 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 must be an integer。

我也尝试在本地查明问题,我可以运行: 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]

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

【问题讨论】:

  • message 到底是什么?我怀疑你只需要Popen(["...\\app.exe", "-switch", message], stdout=subprocess.PIPE, stderr=None)
  • 消息是用户输入:dir、whoami、系统命令等

标签: python subprocess popen


【解决方案1】:

@chepner 先生,您很有帮助。就是这样!我很高兴,谢谢你的帮助。

您的解决方案:

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

那是獾!

【讨论】:

    【解决方案2】:

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

    在这种情况下,您似乎想使用给定参数运行app.exe;简直了

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多