我的目标是使用 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]' 命令的建议将不胜感激。
谢谢你, 马克
要执行命令并将其输出重定向到文件,只需使用
subprocess.run
。它有所有选项。
with open(dst_fullPath_based_on_date, "w") as f:
subprocess.run(["conda", "list"], stdout=f)
请参阅
subproces.run
和 subprocess.Popen
文档。
在我的机器上,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)