【问题标题】:combine python function with for loops in bash terminal在bash终端中将python函数与for循环结合起来
【发布时间】:2015-08-12 09:58:48
【问题描述】:

我的目标是打开多个文件(一个接一个,在 bash 终端中使用 for 循环)并使用 PLINK(一个程序)以及后来的 python 函数对其进行修改。以下是代码:

for i in {1..10}; do
  plink --cow --noweb --lfile $i --extract extract1.snp --recode --out 1$i
  python -c 'import file_convert;file_convert.convert_tree_mix("1$i.map","tmp$i")'
done

但是,正如预期的那样,python 无法读取并且无法打开“11.map”,它没有将“$i”替换为 1。我如何修改代码以便 python 函数结合 for 循环,每次根据“i”的值打开不同的文件

【问题讨论】:

  • 试试python -c "import file_convert;file_convert.convert_tree_mix(\"1$i.map\",\"tmp$i\")"
  • 非常感谢,成功了:)

标签: python bash for-loop


【解决方案1】:

你有没有试过这样调用python:

python -c 'import sys; import file_convert;file_convert.convert_tree_mix(sys.argv[1],sys.argv[2])' "1$i.map" "tmp$i";

?

【讨论】:

  • 一般来说,这比尝试使用shell插值构建动态字符串让Python执行要好。
【解决方案2】:

您需要将整个 python 代码包含在双引号中,以便 python 代码中的$1 会扩展。 shell中的$1指的是第一个参数。

python -c "import file_convert;file_convert.convert_tree_mix(\"1$i.map\",\"tmp$i\")"

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多