从子进程启动时,python 应用程序无法工作

问题描述 投票:0回答:1

我在可编辑模式下安装了带有

pip
的应用程序 (
App
)。 我通过
App
在脚本中使用
subprocess
App
应在包含输入
csv
的文件夹中创建一个子文件夹,然后将另外 4 个 CSV 文件添加到该子文件夹中。 当我通过脚本中的
subprocess
调用此应用程序时,它会运行一段可疑的短时间,然后完成。 在
subprocess
调用之前,脚本中有打印语句,但没有子文件夹,这意味着我的
subprocess
调用存在问题。 有人能看到任何问题吗?

我正在 conda 虚拟环境中从 USB 运行脚本。 我将尝试从我的 C 驱动器运行它,看看是否有效。 我已经通过将命令复制到子进程来从命令行成功运行

App

有人能看出任何明显的问题吗?

谢谢!

脚本:

print (f'running App on {query_filepath}')
subprocess.run(f"App -csv {query_filepath} -e -sd",
               shell = True)
raise ValueError()

输出(没有来自应用程序的预期子目录):

running App on d:\databases\formatting/app_query.csv
Traceback (most recent call last):

  File C:\Anaconda3\envs\proteomics\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File d:\databases\formatting\parse_id_mapping.py:83
    raise ValueError()

ValueError

编辑: 我也尝试过以下方法,但没有成功:

subprocess.run(['App', '-csv', query_filepath, '-e', '-sd'],
               shell = True)
python pip command-line environment-variables subprocess
1个回答
0
投票

问题是应用程序遇到错误。 为了防止数据覆盖,它会检查子文件夹(包含我的问题中提到的结果 CSV)是否已存在,如果确实要求用户移动或重命名子文件夹,则会引发错误。 当我调用应用程序时,该子文件夹已经存在,因此它向 stderr 引发了错误,而我没有检查或捕获该错误。 我认为最简单的修复方法是在子进程调用中使用

check = True
来确认它是否正确完成。

这个解决方案主要归功于@axerotol,他将我链接到了他们正在详细讨论子进程调用的答案。 这导致我将子进程输出分配给一个变量,然后我在 Spyder 中检查该变量,这立即突出了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.