首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >发布启动应用程序:脚本的最后2行

发布启动应用程序:脚本的最后2行
EN

Stack Overflow用户
提问于 2013-08-03 16:03:54
回答 2查看 99关注 0票数 1

理想情况下,我希望这两个应用程序的启动彼此独立。我可以让subprocess.call启动这两个应用程序,如果我把脚本的所有启动部分/行放到一个新脚本中,并在它试图启动的文件所在的目录中启动它。(理想情况下,我希望让它在pc上的任何地方运行)

顺便说一句,当我用命令提示符运行它来测试它时,读出的结果是空的(所以我觉得它在某种奇怪的意义上是工作的)

代码语言:javascript
运行
复制
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

编辑:顺便说一句,当我把启动命令放到一个新的脚本中时(我在下面发布),它一次只启动一个应用程序(第二个应用程序是在第一个应用程序关闭/退出时启动的。

代码语言:javascript
运行
复制
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)

打印测试:

代码语言:javascript
运行
复制
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测试:

代码语言:javascript
运行
复制
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)

(这不是很理想,但这是一个开始!)

EN

回答 2

Stack Overflow用户

发布于 2013-08-03 16:27:51

在文档中:subprocess.call运行args描述的命令。等待命令完成,然后返回返回代码属性。

尝试:

代码语言:javascript
运行
复制
subprocess.Popen()

在当前使用call的所有行上,您可能需要将路径添加到不在当前路径上的任何程序。

两个基本的调试技巧

  1. 学习如何在调试器下运行并逐步执行代码或
  2. 将带有可识别文本的打印语句放入代码中的开始点、结束点、中间点和四分之一点,并查看它们是否都打印出来。如果没有,那么问题出在要打印的最后一张和下一张之间,因此添加更多的打印。
票数 1
EN

Stack Overflow用户

发布于 2013-08-03 17:41:55

让它工作的诀窍是指定我想要启动的.exe文件的完整路径名,并将第一个"call“函数切换为"Popen”。此外,我将"subprocess.call('PnkBstrA.exe',cwd=data_dir)“前面的cwd=镜像到它上面的那个,我还没有测试这是否是必要的,所以你可以尝试一下,看看如果你移除顶部或底部的那个,它是否仍然有效。

感谢stackoverflow的UnSung英雄falsetru的纪念碑(如果不感兴趣,跳过):我只想感谢Falsetru是迄今为止我在stackoverflow上遇到的最友好和最随和的用户之一,对于任何像我这样的新用户来说,他真的是一个完美的榜样,如果没有falsetru,我不可能在过去的一周取得今天的成就。他对我的教育和进步起到了至关重要的作用,这要归功于他的承诺和耐心的理解。

谢谢你的法尔

最终脚本100%工作:

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18030692

复制
相关文章

相似问题

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