首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法通过子进程执行msg (和其他) Windows命令

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

Stack Overflow用户
提问于 2018-06-02 06:51:48
回答 3查看 915关注 0票数 7

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

import subprocess
subprocess.call("msg * Hey",shell=True)

从理论上讲,这应该会向网络上的每一台计算机发送“嘿”。不幸的是,这根本没有运行,我不太确定为什么。我可以在cmd上成功地运行它,但是不能让它在Python中工作。

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

编辑:解决了,感谢大家的帮助。升级到64位Python做到了这一点。

EN

回答 3

Stack Overflow用户

发布于 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

票数 4
EN

Stack Overflow用户

发布于 2018-06-02 06:58:02

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

subprocess.call(['msg', '*', 'Hey'], shell=True)
票数 -1
EN

Stack Overflow用户

发布于 2018-06-02 14:54:48

尝试输入msg命令的完整路径。示例如下所示

import subprocess
subprocess.call("/usr/local/bin/msg * Hey",shell=True)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50651872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档