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 就成功了。
在 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)
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |