我在C:/myproject/harry.py
harry.py正在启动线程。
harry.py使用已建立的路径self.relativePath = os.path.dirname(sys.argv[0])
每隔几秒保存并加载文本文档
在每个线程中,调用一个子进程来激活C:/myproject/betty/here.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()
或
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
doit = subprocess.Popen('here.exe -command', cwd='C:/myproject/betty/')
doit.wait()
响应:
FileNotFoundError: [WinError 2] The system cannot find the file specified
是否可以使用自定义路径运行子文件夹内的子进程...这不会干扰已建立的路径self.relativePath
谢谢,
答案 0 :(得分:3)
你非常接近:
> doit = subprocess.Popen('here.exe -command', cwd='C:/myproject/betty/')
如果您的命令被调用here.exe -command
,这实际上会起作用,但当然,不存在这样的文件。你想要['here.exe', '-command']
(或者更不安全和更低效地添加shell=True
;但是真的,不要)。
似乎你忘了在这次尝试中传递env=my_env
;虽然here.exe
确实要求你修改PATH
吗?如果确实如此,为每个新子流程重复创建一个新副本似乎有点浪费。
您还需要切换到subprocess.run()
或其中一个旧包装器;你应该只使用库函数中的低级Popen()
函数。
另一方面,here.exe
确实需要在特定目录中运行,并且PATH
上是否存在该目录? Windows有点奇怪,Windows程序员通常不了解基本的命令行可用性设计原则;但如果here.exe
完全正确写入,也许你实际上正在寻找
s = subprocess.run(['c:/myproject/betty/here.exe', '-command'], env=my_env)
答案 1 :(得分:0)
我已经在主题的各种stackoverflow帖子的帮助下发现了答案,并且找到了可能的解决方案。这不容易!
self.relativePath = os.path.dirname(sys.argv[0])
self.relativePath1 = self.relativePath + '\\your_subdirectoryHERE\\'
确保包含双斜杠,以匹配os.path.dirname(sys.argv [0])
self.process = subprocess.Popen(self.relativePath1 + 'flare.exe -command', cwd=self.relativePath1)