理想情况下,我希望这两个应用程序的启动彼此独立。我可以让subprocess.call启动这两个应用程序,如果我把脚本的所有启动部分/行放到一个新脚本中,并在它试图启动的文件所在的目录中启动它。(理想情况下,我希望让它在pc上的任何地方运行)
顺便说一句,当我用命令提示符运行它来测试它时,读出的结果是空的(所以我觉得它在某种奇怪的意义上是工作的)
import os
import shutil
import subprocess
data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
os.mkdir(data_dir)
if os.path.exists(dest_dir):
shutil.rmtree(dest_dir)
shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)
现在任何帮助都是非常有用的
感谢‘s
编辑:顺便说一句,当我把启动命令放到一个新的脚本中时(我在下面发布),它一次只启动一个应用程序(第二个应用程序是在第一个应用程序关闭/退出时启动的。
import os
import shutil
import subprocess
data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)
打印测试:
import os
import shutil
import subprocess
data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
os.mkdir(data_dir)
if os.path.exists(dest_dir):
shutil.rmtree(dest_dir)
shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
print subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)
Popen测试:
import os
import shutil
import subprocess
data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
subprocess.Popen(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)
(这不是很理想,但这是一个开始!)
发布于 2013-08-03 16:27:51
在文档中:subprocess.call运行args描述的命令。等待命令完成,然后返回返回代码属性。
尝试:
subprocess.Popen()
在当前使用call的所有行上,您可能需要将路径添加到不在当前路径上的任何程序。
两个基本的调试技巧
发布于 2013-08-03 17:41:55
让它工作的诀窍是指定我想要启动的.exe文件的完整路径名,并将第一个"call“函数切换为"Popen”。此外,我将"subprocess.call('PnkBstrA.exe',cwd=data_dir)“前面的cwd=镜像到它上面的那个,我还没有测试这是否是必要的,所以你可以尝试一下,看看如果你移除顶部或底部的那个,它是否仍然有效。
感谢stackoverflow的UnSung英雄falsetru的纪念碑(如果不感兴趣,跳过):我只想感谢Falsetru是迄今为止我在stackoverflow上遇到的最友好和最随和的用户之一,对于任何像我这样的新用户来说,他真的是一个完美的榜样,如果没有falsetru,我不可能在过去的一周取得今天的成就。他对我的教育和进步起到了至关重要的作用,这要归功于他的承诺和耐心的理解。
谢谢你的法尔
最终脚本100%工作:
import os
import shutil
import subprocess
data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
os.mkdir(data_dir)
if os.path.exists(dest_dir):
shutil.rmtree(dest_dir)
shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
subprocess.Popen([r'C:\Users\Spanjer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\Data\explorer.exe'], cwd=data_dir)
subprocess.call([r'C:\Users\Spanjer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\Data\PnkBstrA.exe'], cwd=data_dir)
https://stackoverflow.com/questions/18030692
复制相似问题