2016-06-10 2 views
1

파이썬 스크립트에서 awk 스크립트를 호출하려고합니다. 내가 subprocess.Popen()를 사용파이썬 subprocess.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

'NR <5' 대신'NF <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) 

또는

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)