bash 4.4 里面 python 和 os.system
bash 4.4 inside python with os.system
我在 运行 在 python 脚本中设置 bash 脚本时遇到问题 script.py
:
import os
bashCommand = """
sed "s/) \['/1, color=\"#ffcccc\", label=\"/g" list.txt | sed 's/\[/ GraphicFeature(start=/g' | sed 's/\:/, end=/g' | sed 's/>//g' | sed 's/\](/, strand=/g' | sed "s/'\]/\"),/g" >list2.txt"""
os.system("bash %s" % bashCommand)
当我 运行 this as python script.py
时,没有写入 list2.txt
,但在终端上我看到我在 bash-4.4
而不是原生 macOS bash.
知道是什么原因造成的吗?
我上面发布的脚本是一个更大的脚本的一部分,首先它读取一些文件并输出 list.txt
。
编辑:这里有更多的描述
在第一个 python 脚本中,我解析了一个文件(具体来说是 genbank 文件),以将包含项目(位置、链、名称)的列表写入 list.txt
。
此 list.txt
必须转换为可由第二个 python 脚本解析,因此 sed.
list.txt
[0:2463](+) ['bifunctional aspartokinase/homoserine dehydrogenase I']
[2464:3397](+) ['Homoserine kinase']
[3397:4684](+) ['Threonine synthase']
所有括号,:
,'
都必须替换为看起来像所需的输出 list2.txt
GraphicFeature(start=0, end=2463, strand=+1, color="#ffcccc", label="bifunctional aspartokinase/homoserine dehydrogenase I"),
GraphicFeature(start=2464, end=3397, strand=+1, color="#ffcccc", label="Homoserine kinase"),
GraphicFeature(start=3397, end=4684, strand=+1, color="#ffcccc", label="Threonine synthase"),
读取Python中的文件,用单个正则表达式解析每一行,并输出由捕获的片段构造的适当行。
import re
import sys
# 1 2 3
# --- --- --
regex = re.compile(r"^\[(\d+):(\d+)\]\(\+\) \['(.*)'\]$")
# 1 - start value
# 2 - end value
# 3 - text value
with open("list2.txt", "w") as out:
for line in sys.stdin:
line = line.strip()
m = regex.match(line)
if m is None:
print(line, file=out)
else:
print('GraphicFeature(start={}, end={}, strand=+1, color="#ffcccc", label="{}"),'.format(*m.groups()), file=out)
我输出与正则表达式不匹配的行未修改;您可能想完全忽略它们或报告错误。
我在 运行 在 python 脚本中设置 bash 脚本时遇到问题 script.py
:
import os
bashCommand = """
sed "s/) \['/1, color=\"#ffcccc\", label=\"/g" list.txt | sed 's/\[/ GraphicFeature(start=/g' | sed 's/\:/, end=/g' | sed 's/>//g' | sed 's/\](/, strand=/g' | sed "s/'\]/\"),/g" >list2.txt"""
os.system("bash %s" % bashCommand)
当我 运行 this as python script.py
时,没有写入 list2.txt
,但在终端上我看到我在 bash-4.4
而不是原生 macOS bash.
知道是什么原因造成的吗?
我上面发布的脚本是一个更大的脚本的一部分,首先它读取一些文件并输出 list.txt
。
编辑:这里有更多的描述
在第一个 python 脚本中,我解析了一个文件(具体来说是 genbank 文件),以将包含项目(位置、链、名称)的列表写入 list.txt
。
此 list.txt
必须转换为可由第二个 python 脚本解析,因此 sed.
list.txt
[0:2463](+) ['bifunctional aspartokinase/homoserine dehydrogenase I']
[2464:3397](+) ['Homoserine kinase']
[3397:4684](+) ['Threonine synthase']
所有括号,:
,'
都必须替换为看起来像所需的输出 list2.txt
GraphicFeature(start=0, end=2463, strand=+1, color="#ffcccc", label="bifunctional aspartokinase/homoserine dehydrogenase I"),
GraphicFeature(start=2464, end=3397, strand=+1, color="#ffcccc", label="Homoserine kinase"),
GraphicFeature(start=3397, end=4684, strand=+1, color="#ffcccc", label="Threonine synthase"),
读取Python中的文件,用单个正则表达式解析每一行,并输出由捕获的片段构造的适当行。
import re
import sys
# 1 2 3
# --- --- --
regex = re.compile(r"^\[(\d+):(\d+)\]\(\+\) \['(.*)'\]$")
# 1 - start value
# 2 - end value
# 3 - text value
with open("list2.txt", "w") as out:
for line in sys.stdin:
line = line.strip()
m = regex.match(line)
if m is None:
print(line, file=out)
else:
print('GraphicFeature(start={}, end={}, strand=+1, color="#ffcccc", label="{}"),'.format(*m.groups()), file=out)
我输出与正则表达式不匹配的行未修改;您可能想完全忽略它们或报告错误。