Python:在32位Python上使用subprocess.Popen()运行批处理文件时出错

Python:在32位Python上使用subprocess.Popen()运行批处理文件时出错,python,batch-file,environment-variables,subprocess,32bit-64bit,Python,Batch File,Environment Variables,Subprocess,32bit 64bit,我有一个批处理文件“test_msg_bat.bat”,它在命令行中运行良好,但在python子进程popen中返回下面的错误 错误:未将“msg”识别为内部或外部命令、可操作程序或批处理文件。 以下是python代码: import subprocess, os env = os.environ p = subprocess.Popen("test_msg_bat.bat", env=env) 批处理文件(“test_msg_bat.bat”): 操作系统:Windows 7(64位) Py

我有一个批处理文件“test_msg_bat.bat”,它在命令行中运行良好,但在python子进程popen中返回下面的错误

错误:未将“msg”识别为内部或外部命令、可操作程序或批处理文件。

以下是python代码:

import subprocess, os
env = os.environ
p = subprocess.Popen("test_msg_bat.bat", env=env)
批处理文件(“test_msg_bat.bat”):

操作系统:Windows 7(64位)

Python版本:2.6.6(32位)

编辑:
这在使用64位python时有效

我想这里可能出了问题,因为我刚刚创建了一个内容相同的新.bat文件,并将其放在桌面上,然后运行python代码,没有问题。编辑:还必须在我的桌面上创建一个空的abcd.txt文件,这样才能工作

import subprocess, os
env = os.environ
p = subprocess.Popen("C:/Users/Stoves/Desktop/test_msg_bat.bat", env=env)
返回:

type C:\Users\Stoves\Desktop\abcd.txt   | msg /time:60 /w Stoves
Message from STDIN is empty; no message sent
你能详细说明你在做什么吗?或者可能会发生什么

二次编辑:在abcd.txt文件中添加了
hello world
,第二次运行该文件会生成一个弹出窗口,其中包含该消息


根据操作系统(“C:\\Windows\\System32\\msg.exe*test”)工作变化:

键入C:\abcd.txt | msg/time:60/w%username%

键入C:/abcd.txt |“C:/Windows/System32/msg.exe”/time:60/w%username%


如果希望Windows文件系统重定向程序导致此错误,请使用
\\
而不是
/
。有关如何修复此问题的详细信息,请参阅下面的链接。 Python 32位-64位问题:

解决方案:

批处理无法识别您使用的命令时,会出现错误消息。由于msg仅包含在Windows 7的业务和最终版本中,我猜您没有使用这些版本中的任何一个,必须下载msg.exe,并且msg.exe不在正确的位置。在开始下载和处理问题之前,请在命令提示符中进行测试:
msg*test
如果您得到一个带有“test”的弹出窗口,那么msg正在工作,如果没有,那么您需要按照SomethingDark所说的做。当您在批处理文件中使用msg.exe的完整路径时,python脚本是否工作?@SomethingDark我使用的是Windows 7的商业版本,并且没有下载或移动msg.exe。@stoves“msg*test”可以从命令行工作。但当我尝试os.system(“msg*test”)时不起作用。我收到了相同的错误消息“'msg'无法识别…”您使用的是哪个版本的python和windows?Win 8.1 Pro,python 2.7.7I刚刚在64位版本的python 2.6上尝试了os.system(“C:\\windows\\System32\\msg.exe*test”),它可以工作。既然可以,您应该能够修改批处理文件以直接运行msg。回答更新,试一试。很抱歉造成混乱(评论太多)。问题不在于没有提到完整路径。64位版本的python即使没有路径也可以工作。i、 例如,操作系统(“msg*测试”)。我使用32位版本的python还有其他原因,如果可能的话,我想让它在32位上工作。谢谢你的帮助!
type C:\Users\Stoves\Desktop\abcd.txt   | msg /time:60 /w Stoves
Message from STDIN is empty; no message sent