2016-07-05 2 views
0

bash 명령이 데이터를 표시하는 대신 파일에 저장하는 python에서 bash 명령을 실행하려고합니다. 이러한 명령의 예는 내가 더 bar.txt가 생성되지 파이썬 코드를 실행으로데이터를 파일에 저장하는 Python 실행 bash 명령

$ echo 'foo' > bar.txt 

현재 내 코드는 다음

process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE) 
process.communicate() 

모양이다. bash 스크립트에서 데이터를 저장하는 방법에 대한 아이디어가 있습니까? 데이터 만 저장하면 안됩니다.

+2

'>'를 사용하는 리디렉션과'echo'와 같은 쉘 내장 명령은'bash'를 필요로합니다. 그래서'Popen'에'shell = True'를 추가하십시오. – cdarke

+2

커맨드 출력을'>'로 리디렉션하면'stdout' 인수를 넘기는 포인트가 없습니다. – chepner

답변

0

print()을 사용하십시오. 그처럼 간단합니다. > 명령으로 인해 일반적으로 콘솔에 인쇄되는 내용이 파일로 인쇄됩니다.

with open('bar.txt', 'w') as F: 
    F.write(data) 
+0

불행히도이 옵션은 사용자 작업 –

+0

에 대해 다른 인쇄물을 표시해야하기 때문에 사용할 수 없습니다. 그런 다음 출력을 파이썬으로 문자열로 지정하고'open (filename, 'w')을 F : F.write로 사용해야합니다 (문자열)'을 사용하여 파일에 쓸 수 있습니다. –

+0

감사합니다. 문제가 해결되었습니다. –

0

기본적으로 : 당신이 >와 파이썬 스크립트를 실행하지 않으려면

~$ python3.5 your_script.py > bar.txt 

것은, 당신은 파일에 데이터의 문자열 버전을 작성하는 파이썬의 파일 작업을 사용해야합니다 , subprocess.Popen()은 셸을 통해 명령을 실행하지 않으므로 I/O 리디렉션 연산자에는 특별한 의미가 없습니다. 즉, 일반 인수로 처리됩니다. 가장 중요한 것은 쉘을 사용하게 만드는 것입니다. Popen(), 당신은 shell=True을 통과 할 것입니다, 당신은 하지 명령 문자열을 분할 할 다음 subprocess.call() (파이썬 2) 또는 subprocess.run() (파이썬 3) 편의 기능이 당신에게 어떤 이점을 제공하는지 여부

process = subprocess.Popen(bashCommand, stdout=subprocess.PIPE, shell=True) 

당신은 또한 고려해야를 . 그러나 그들이하는 일이 명확하지 않다. 특히 두 경우 모두 동일한 shell 인수를 사용해야합니다.

관련 문제