为了账号安全,请及时绑定邮箱和手机立即绑定

如何将shell命令中的变量分配给python脚本

如何将shell命令中的变量分配给python脚本

湖上湖 2022-06-22 18:20:31
我正在尝试使用 slurm 中的数组运行批处理。我只知道从数组(文本文件)中提取变量的 shell 命令,但未能将其分配为 Python 变量。我必须为 Python slurm 脚本分配一个变量。我使用 shell 命令从数组中提取值。但是在将其分配给变量时遇到错误。我使用了子进程、os.system 和 os.popen。或者有什么方法可以从文本文件中提取值以用作 Python 变量?start_date = os.system('$(cat startdate.txt | sed -n ${SLURM_ARRAY_TASK_ID}p)')start_date = subprocess.check_output("$(cat startdate.txt | sed -n ${SLURM_ARRAY_TASK_ID}p)", shell=True)start_date = os.popen('$(cat startdate.txt | sed -n ${SLURM_ARRAY_TASK_ID}p)').read()start_date = '07-24-2004'
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

不要使用$(...). 这将执行命令,然后尝试执行命令的输出。您希望将输出发送回 python,而不是由 shell 重新执行。

start_date = subprocess.check_output("cat startdate.txt | sed -n ${SLURM_ARRAY_TASK_ID}p", shell=True)



查看完整回答
反对 回复 2022-06-22
?
墨色风雨

TA贡献1853条经验 获得超6个赞

Barmar 是正确的,$(...)部分是为什么你没有得到你想要的,但真正的问题是为什么当你使用 python 时你还想使用 cat 和 sed。只需打开文件并提取您想要的信息


import os

with open("startdate.txt", "r") as fh:

    lines = fh.readlines()

start_date = lines[os.environ['SLURM_ARRAY_TASK_ID']].strip()

该.strip()部分摆脱了换行符。


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信