【发布时间】:2013-12-05 23:01:19
【问题描述】:
我的子进程调用应该调用tabix 1kg.phase1.snp.bed.gz -B test.bed | awk '{FS="\t";OFS="\t"} $4 >= 10',但给了我错误,因为它同时包含" 和'。我曾尝试将r 用于原始字符串,但我无法找出正确的组合来防止错误。我当前的通话如下所示:
snp_tabix = subprocess.Popen(["tabix", tgp_snp, "-B", infile, "|", "awk", """'{FS="\t";OFS="\t"}""", "$4", ">=", maf_cut_off, r"'"], stdout=subprocess.PIPE)
这给出了错误TypeError: execv() arg 2 must contain only strings
【问题讨论】:
-
看起来其中一个变量不是字符串。猜测一下,
infile可能是一个文件对象。 -
如果我理解您的命令行正确,单引号仅用于外壳转义目的。但是由于您使用的是 Popen,它应该有
shell=False,所以您根本不需要它们,因为您没有使用 shell 来确定输入的哪些位以何种顺序进入您的外部程序。 -
@MaxNoel:由于管道(
|),它在没有外壳的情况下将无法工作。你需要reproduce its functionality somehow。
标签: python subprocess