如何使用Python的子进程运行“conda list”命令并将其通过管道传输到文本文件

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

我的目标是使用 Python 的 subprocess 模块在 Anaconda 提示环境中运行以下 'conda list>[fullPath_based_on_date]' 命令:

r'conda list>z:\backup\Anaconda\conda_list_2024-05-06_13-23-45.txt'

我无法找到一种方法让子进程在 Anaconda 环境中运行该命令。 但我编写了下面的 Python 脚本,希望有人能给我一些关于如何修复它的提示,以及我可以在哪里了解我做错了什么。 这是我的 Python 脚本:

import os
import subprocess
from datetime import datetime as DTT

NL, TAB, NLT = '\n', '\t', '\n\t'# {NL}{TAB}{NLT}

DT_now_str = (f'''{(DTT.now()).strftime("%Y-%m-%d_%H-%M")}''')
DT_now_str_wSeconds = (f'''{(DTT.now()).strftime("%Y-%m-%d_%H-%M-%S")}''')
print(f'''{DT_now_str = }{NLT}'''  +
    f'''{DT_now_str_wSeconds = }''')

dst_fullPath_based_on_date = r'z:\backup\Anaconda' + os.sep + 'conda_list_' + DT_now_str_wSeconds + '.txt'
cmd_conda_list_piped2txt = r'conda list>' + dst_fullPath_based_on_date
print(f'''{NL}{cmd_conda_list_piped2txt = }''')

subprocess.run(cmd_conda_list_piped2txt)
print(f'''{NL}{exitcode = }''' +
    f'''{out = }''' +
    f'''{err = }''')

cmd_edit_conda_list = r"C:\Program Files\Notepad++\notepad++.exe" + ' ' + dst_fullPath_based_on_date
print(f'''{NL}{cmd_edit_conda_list = }''')

subprocess.run(cmd_edit_conda_list)
print(f'''{NL}{exitcode = }''' +
    f'''{out = }''' +
    f'''{err = }''')

任何关于如何让子进程模块在 Anaconda 环境中运行 'conda list>[fullPath_based_on_date]' 命令的建议将不胜感激。

谢谢你, 马克

python anaconda subprocess conda
2个回答
0
投票

要执行命令并将其输出重定向到文件,只需使用

subprocess.run
。它有所有选项。

with open(dst_fullPath_based_on_date, "w") as f:
    subprocess.run(["conda", "list"], stdout=f)

请参阅

subproces.run
subprocess.Popen
文档。


0
投票

在我的机器上,Anaconda 提示符的链接是具有此目标的快捷方式:

%windir%\System32\cmd.exe "/K" %APPDATA%\..\Local\anaconda3\Scripts\activate.bat %APPDATA%\..\Local\anaconda3

所以我建议这样做:

import subprocess

# define 'shortcuts'
windir = r'C:\Windows'
anaconda_path = r'C:\Users\USERNAME\AppData\Local\anaconda3'  # put your username
env_to_activate = 'py39'  # env that you want to 'conda list'

# define command:
# from my Anaconda command prompt shortcut, the line below activate base environment
command = fr'{windir}\System32\cmd.exe "/K" {anaconda_path}\Scripts\activate.bat {anaconda_path}'
# if you need another env activated:
command = command + f'| conda activate {env_to_activate}'
command = command + '| conda list'  # pipe gives execution once previous command is done (ie conda activate)
command = command + '> conda_list.txt'  # write to this file

# now, run the above command:
subprocess.run(command)
© www.soinside.com 2019 - 2024. All rights reserved.