我遇到了一些问题,包括subprocess.call(),subprocess.run(),subprocess.Popen(),os.system(),以及其他运行命令提示符命令的函数,因为我可以'似乎让msg
命令起作用。
import subprocess
subprocess.call("msg * Hey",shell=True)
理论上,这应该发送"嘿"不幸的是,网络上的每台计算机都没有运行,我不太清楚为什么。我可以在cmd上成功运行它但是不能让它在python上运行
我很想知道为什么这不起作用,并希望能够修复我的代码或替代解决方案。
编辑:解决了,谢谢大家的帮助。升级到64位就可以了解答案 0 :(得分:3)
在64位Windows中,“ msg.exe”仅作为本机64位二进制文件分发。如果您使用的是32位Python(在WOW64仿真下执行),则找不到此文件。 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'])
请注意,msg.exe与CMD无关,因此没有理由使用shell=True
。
答案 1 :(得分:0)
尝试将其作为单独的参数调用:
subprocess.call(['msg', '*', 'Hey'], shell=True)
答案 2 :(得分:0)
尝试放置msg
命令的完整路径。列出的例子
import subprocess
subprocess.call("/usr/local/bin/msg * Hey",shell=True)