我将有效的 Python字典作为参数传递给我的Python脚本。这是一组实验的一部分,因此我的脚本必须多次启动并在字典中使用不同的值。我正在使用远程机器,所以我使用的是GNU Parallel,它过去一直很好用(是的,我引用了论文:)。
事实是,参数被反复操纵,所以我需要使用引号和反斜杠来使我的论证变得合理和安全。我的问题是:有更好的方法吗?这是一个最小的Python脚本:
import ast
import sys
print(sys.argv[1])
print(ast.literal_eval(sys.argv[1]))
如果我运行以下命令,我将获得所需的结果:
parallel --header : python example.py '\{\"var1\":\ {var1},\ \"var2\":\ {var2}\}' ::: var1 1 ::: var2 2
输出:
{"var1": 1, "var2": 2}
{'var1': 1, 'var2': 2}
有没有更简洁的方法拼出字典?
我非常感谢任何帮助!
答案 0 :(得分:0)
通过执行以下操作,您可以在引用字符串的开头和结尾处将其减少到一些混乱:
parallel --header : python /tmp/test.py "'"'{"var1": {var1}, "var2": {var2}}'"'" ::: var1 2 ::: var2 1
现在这意味着您不必担心转义dict中的值,因为它最终会引用实际处理它的任何内容。
答案 1 :(得分:0)
功能是摆脱一些引用地狱的好方法:
myfunc() {
python example.py '{"var1": "'"$1"'", "var2": "'"$2"'"}'
}
export -f myfunc
parallel --header : myfunc ::: var1 "1st var" ::: var2 "2nd var"
-q也可以帮助(但限制你有一个语句(没有组合命令或重定向):
parallel -qv --header : python example.py '{"var1": "{var1}", "var2": "{var2}"}' ::: var1 "1st var" ::: var2 "2nd var"
你没有写出输入值有多棘手。如果它们包含“或TAB,那么您需要额外引用:
parallel --colsep '\n' -qv --header : python example.py '{"var1": "{=1 $_=Q($_) =}", "var2": "{=2 $_=Q($_) =}"}' ::: var1 "1st\"\$#<TABHERE>var" ::: var2 "2nd var"