Python3:子进程,更改目录

2024-06-28 19:16:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主项目在C:/myproject/harry.py

在哈里。皮耶正在启动线程。在

在哈里。皮耶正在使用已建立的路径每隔几秒钟保存和加载文本文档self.relativePath = os.path.dirname(sys.argv[0])

在每个线程中,调用一个子进程来激活C:/myproject/betty/here.exe中的命令行.exe文件

我尝试了各种方法来实现这一点,比如:

my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
doit = subprocess.Popen('cd betty/', 'here.exe -command', env=my_env)
doit.wait()

或者

^{pr2}$

回应:

FileNotFoundError: [WinError 2] The system cannot find the file specified

是否可以使用自定义路径在子文件夹中运行子进程。。。这不会干扰已经建立的路径self.relativePath

谢谢


Tags: pathself路径envhere进程osmy
2条回答

你很接近:

> doit = subprocess.Popen('here.exe -command', cwd='C:/myproject/betty/')

如果您的命令被调用here.exe -command,这实际上是可以工作的,但是当然,没有这样的文件存在。你想要['here.exe', '-command'](或者更不安全、效率更低的添加shell=True;但实际上,不需要)。在

似乎您在这次尝试中也忘记了传入env=my_env;但是here.exe真的需要您修改{}?如果是这样的话,为每个新的子流程重复创建一个新副本似乎有点浪费。在

您还需要切换到subprocess.run()或一个旧的包装器;实际上应该只从库函数直接使用低级的Popen()函数。在

另一方面,here.exe真的需要在一个特定的目录中运行吗,PATH上是否存在该目录?Windows有点奇怪,Windows程序员通常不知道基本的命令行可用性设计原则;但是如果here.exe写得很正确,那么您可能实际上在寻找

^{pr2}$

我发现了答案的一些帮助,从不同的stackoverflow的帖子,以及跌跌撞撞地通过可能的解决方案。这并不容易!在

self.relativePath = os.path.dirname(sys.argv[0])

self.relativePath1 = self.relativePath + '\\your_subdirectoryHERE\\'

一定要包括双斜杠,以匹配操作系统路径目录名(系统argv[0])

^{pr2}$

相关问题 更多 >