【发布时间】:2020-04-12 17:46:55
【问题描述】:
我正在编写脚本以使用 Python 2.6 生成 Autosys 报告,并且我想将变量从 python 脚本传递到 bash 命令:
我有 3 个变量:
下个月, ND下个月, 年份
当我使用带有 1 个变量的命令时,它可以正常工作。
env = os.environ.copy()
env['NextMonth'] = NextMonth
subprocess.call('forecast -J *JobABC_* -M ALL -F "${NextMonth}/01/2020 00:00" -T "${NextMonth}/31/2020 23:59" -h -n > PythonReport1.txt', env=env, shell=True)
反之则不行,日期无效:
env = os.environ.copy()
env['NextMonth'] = NextMonth
env['NDNextMonth'] = NDNextMonth
env['Year'] = Year
subprocess.call('forecast -J *JobABC_* -M ALL -F "${NextMonth}/01/${Year}" 00:00" -T "${NextMonth}/${NDNextMonth}/${Year}" 23:59" -h -n > PythonReport1.txt',env=env, shell=True)
您能否检查一下,如何将这 3 个变量读入命令中? 错误:TypeError:execve() arg 3 包含非字符串值
【问题讨论】:
-
...您为什么首先为此使用环境变量?将值插入字符串不是更有意义吗?
-
我想你想用 ` "${'+str(NextMonth)+'}/01/'` 来结束字符串?
-
你在那个字符串中有一些额外的双引号。试试看:
subprocess.call('forecast -J *JobABC_* -M ALL -F "${NextMonth}/01/${Year} 00:00" -T "${NextMonth}/${NDNextMonth}/${Year} 23:59" -h -n > PythonReport1.txt',env=env, shell=True) -
已解决,它的工作原理是这样的: os.environ['NextMonth'] = str(NextMonth) os.environ['NDNextMonth'] = str(NDNextMonth) os.environ['Year'] = str(Year) subprocess.call('预测 -J JobABC_ -M ALL -F "${NextMonth}/01/${Year}" 00:00" -T "${NextMonth}/ ${NDNextMonth}/${Year}" 23:59" -h -n > PythonReport1.txt', shell=True)
标签: python linux bash python-2.6