无法通过子进程执行 msg(和其他)Windows 命令

Hen*_*age 6 python windows subprocess python-3.x

我在使用subprocess.call(), subprocess.run(), subprocess.Popen(), os.system(), (以及其他运行命令提示符命令的函数)方面遇到了一些问题,因为我似乎无法使msg命令正常工作。

import subprocess
subprocess.call("msg * Hey",shell=True)
Run Code Online (Sandbox Code Playgroud)

理论上,不幸的是,这应该向网络上的每台计算机发送“嘿”,这根本没有运行,我不太确定为什么。我可以cmd成功运行它,但无法通过 Python运行它。

我很想知道为什么这不起作用,并希望有一种方法来修复我的代码或替代解决方案。

编辑:解决了,谢谢大家的帮助。升级到 64 位 Python 就成功了。

Ery*_*Sun 5

在 64 位 Windows 中,“msg.exe”仅作为本机 64 位二进制文​​件分发。如果您使用的是在 WOW64 模拟下执行的 32 位 Python,则不会找到此文件。WOW64 将“System32”访问重定向到“SysWOW64”目录。在Windows 7+中,使用虚拟的“SysNative”目录来访问真实的“System32”。例如:

sysroot = os.environ['SystemRoot']
sysnative = os.path.join(sysroot, 'SysNative')
if not os.path.exists(sysnative):
    sysnative = os.path.join(sysroot, 'System32')

msgexe_path = os.path.join(sysnative, 'msg.exe')
subprocess.call([msgexe_path, '*', 'Hey'])
Run Code Online (Sandbox Code Playgroud)

请注意,msg.exe 与 CMD 无关,因此没有理由使用shell=True.


Rya*_*fer -1

尝试将其作为单独的参数调用:

subprocess.call(['msg', '*', 'Hey'], shell=True)
Run Code Online (Sandbox Code Playgroud)