我在可编辑模式下安装了带有
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)
问题是应用程序遇到错误。 为了防止数据覆盖,它会检查子文件夹(包含我的问题中提到的结果 CSV)是否已存在,如果确实要求用户移动或重命名子文件夹,则会引发错误。 当我调用应用程序时,该子文件夹已经存在,因此它向 stderr 引发了错误,而我没有检查或捕获该错误。 我认为最简单的修复方法是在子进程调用中使用
check = True
来确认它是否正确完成。
这个解决方案主要归功于@axerotol,他将我链接到了他们正在详细讨论子进程调用的答案。 这导致我将子进程输出分配给一个变量,然后我在 Spyder 中检查该变量,这立即突出了该问题。