以下是Python脚本中的相关代码,其中执行一些命令来复制可执行文件然后执行它:
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文件夹吗? (我正在以管理员身份运行的命令提示符执行。如何让脚本运行?
答案 0 :(得分:6)
所有程序将一个接一个地立即启动。在每个Popen对象上调用communicate 以等待程序终止。
此外,您使用格式字符串是不必要的危险。 ['copy', exe_file_path, temp_loc]
会自动转义exe_file_path
和temp_loc
中的任何奇怪字符(并且更易于阅读)。
顺便说一下,Python在shutil和os中有很好的复制和删除文件的功能;没有必要为此调用shell程序。
而不是连接字符串来确定exe_file_path
,你应该使用os.path.join
(虽然这不重要,因为你的程序似乎锁定在Windows上)。