通过subprocess调用pip可编辑模式安装的App无预期输出求助
问题排查:subprocess调用pip可编辑安装的App无预期输出
问题背景
通过pip以可编辑模式安装了App,在Python脚本中用subprocess调用该App,预期App会在输入CSV所在文件夹生成子文件夹并输出4个CSV文件,但subprocess调用时运行时间极短,未生成预期内容。
- 环境:conda虚拟环境,脚本最初从USB运行,已移至C盘测试
- 关键现象:直接在命令行复制subprocess中的命令可成功运行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)
排查步骤
- 移除强制终止的异常:脚本中
subprocess.run后立刻raise ValueError(),会直接终止Python进程,大概率App还未执行完成就被打断。先注释掉raise ValueError()再测试。 - 添加执行状态与输出捕获:给
subprocess.run加上参数捕获执行错误和输出,确认App是否实际运行或报错:import subprocess print(f'running App on {query_filepath}') try: result = subprocess.run( ['App', '-csv', query_filepath, '-e', '-sd'], shell=False, # 关闭shell避免路径解析问题 capture_output=True, text=True, check=True ) print("App正常输出:", result.stdout) except subprocess.CalledProcessError as e: print("App执行错误信息:", e.stderr) # raise ValueError() # 先注释该行 - 指定App绝对路径:conda虚拟环境中,可编辑安装的App可能不在subprocess默认PATH里,用Windows的
where App或Linux/macOS的which App找到绝对路径,替换脚本中的App:# 示例:Windows下路径为C:\Anaconda3\envs\proteomics\Scripts\App.exe subprocess.run([r'C:\Anaconda3\envs\proteomics\Scripts\App.exe', '-csv', query_filepath, '-e', '-sd']) - 指定工作目录:部分App依赖当前工作目录生成文件,用
cwd参数指定输入CSV所在文件夹:import os subprocess.run( ['App', '-csv', os.path.basename(query_filepath), '-e', '-sd'], cwd=os.path.dirname(query_filepath), shell=False )
内容的提问来源于stack exchange,提问作者Tim Kirkwood
相关产品推荐
相关产品推荐

