为什么我的脚本在调用.EXE后停止执行命令?

问题描述:

下面是一个Python脚本,其中一些命令的执行复制的可执行文件,然后执行它的相关代码:为什么我的脚本在调用.EXE后停止执行命令?

exe_file_path = os.getcwd() + r'\name_of_executable.exe' 
temp_loc = os.environ['temp'] 

subprocess.Popen(r'copy %s %s' % (exe_file_path, temp_loc), shell=True) 
exe_file_path = os.environ['temp'] + r'\name_of_executable.exe' 
subprocess.Popen(r'start %s' % (exe_file_path), shell=True) 
subprocess.Popen(r'del %s' % (exe_file_path), shell=True) 

目前,仅name_of_executable.exe打印出的文本,然后调用system("pause")

暂停执行后,我推enter,我会认为可执行文件会关闭,Python脚本会继续,但Python的最后一行不会执行。

这是因为我使用TEMP文件夹? (我是从命令提示符下运行以管理员身份运行。如何让脚本工作?

+1

请注意,您也可以使用'shutil'软件包来处理文件复制/移动/删除操作。 – 2011-05-18 17:45:50

所有程序都将被立即开始一个接一个。每个POPEN对象调用communicate等待程序终止。

此外,您的格式字符串的使用是不必要的危险。['copy', exe_file_path, temp_loc]自动转义任何奇怪的字符在exe_file_pathtemp_loc(和更容易阅读)。

顺便说一下,Python有复印很好的功能和删除文件shutilos;有n o需要为此调用shell程序。

而不是连接字符串以确定exe_file_path,您应该使用os.path.join(尽管这并不重要,因为您的程序似乎锁定到Windows)。

+0

我注意到它们确实都是一个接一个地开始的,但是,在每行添加'.communicate()'并不能解决问题。我是否需要将返回的输出和错误放入变量中以便发生该“效应”?现在编辑格式字符串..谢谢。 – 2011-05-18 17:51:28

+0

感谢您的Python技巧。很显然,这种语言是新手。 – 2011-05-18 17:54:46

+0

@josmh请注意,start会在生成新进程后立即返回。只要删除开始(完整的ine将是'subprocess.Popen([exe_file_path])。沟通()'和使用shutil/os函数为另外两个调用。 – phihag 2011-05-18 17:55:00