2016-06-10 21 views
1

我嘗試在我的python腳本中調用awk腳本。我使用subprocess.Popen():在Python子流程中轉義字符串.Popen

awk -F"\t" 'NR<5{ print "SET", "\""$1"\"", "\""$2"|"$3"|"$4"\"" }' folder/file.tsv 

這是腳本:

import os 
import subprocess 

goal_dir = os.path.join(os.getcwd(), "folder", "file.tsv") 

args = ["awk", '-F"\t"', 'NR<5{ print "SET", "\""$1"\"", "\""$2"|"$3"|"$4"\"" }', "{0}".format(goal_dir)] 

process = subprocess.Popen(args, stdout=subprocess.PIPE) 
output = process.communicate()[0] 

但它似乎並不正確轉義文字。

+2

嘗試''-F \\ t''。 – melpomene

+0

你的意思是'NF <5'而不是'NR <5'? –

+0

@HaiVu不,NR是記錄編號。 – Panayotis

回答

0

是這樣的?

subprocess.Popen(r'''awk -F"\t" 'NR<5{ print "SET", "\""$1"\"","\""$2"|"$3"|"$4"\"" }' %s''' % goal_dir, shell=True, stdout=subprocess.PIPE) 

OR

args = ["awk", '-F"\t"', r"""'NR<5{ print "SET", "\""$1"\"", "\""$2"|"$3"|"$4"\"" }'""", "{0}".format(goal_dir)]  
process = subprocess.Popen(" ".join(args), shell=True, stdout=subprocess.PIPE)