我在使用subprocess.call()
、subprocess.run()
、subprocess.Popen()
、os.system()
(以及运行命令提示符命令的其他函数)时遇到了一些问题,因为我似乎无法使用msg
命令。
import subprocess
subprocess.call("msg * Hey",shell=True)
从理论上讲,这应该会向网络上的每一台计算机发送“嘿”。不幸的是,这根本没有运行,我不太确定为什么。我可以在cmd
上成功地运行它,但是不能让它在Python中工作。
我很想知道为什么这不起作用,并希望有一种方法来修复我的代码或替代解决方案。
编辑:解决了,感谢大家的帮助。升级到64位Python做到了这一点。
发布于 2020-01-15 17:02:08
在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'])
请注意,msg.exe与CMD没有任何关系,因此没有理由使用shell=True
。
发布于 2018-06-02 06:58:02
尝试将其作为单独的参数调用:
subprocess.call(['msg', '*', 'Hey'], shell=True)
发布于 2018-06-02 14:54:48
尝试输入msg
命令的完整路径。示例如下所示
import subprocess
subprocess.call("/usr/local/bin/msg * Hey",shell=True)
https://stackoverflow.com/questions/50651872
复制相似问题