2014-06-08 3 views
3

저는 수년 동안 창문으로 스크립팅을 해왔으며 지난 몇 주 동안 대안으로 파이썬을 살펴보기 시작했습니다. mysqldump를 사용하여 mysql 데이터베이스를 백업하기 위해 원시 파이썬 스크립트를 작성하려고합니다. 필자는 보통 문제없이 출력을 파이핑하는 명령 줄을 사용하여이 작업을 수행합니다.mysqldump와 subprocess.call 사용하기

나는 = 똑같이 나는 많은 문이 나는 껍질을 방지해야한다고보고, 나는 파일로 내 표준 출력을 재 지정하려면 다음 코드를 얻으려고 그래서

진정한 subprocess.popen와 쉘 = True로 많은 답변을 참조 모든 성공

sys.stdout=open("mysqldump.txt",'w') 
print("testing line1") 
subprocess.check_output(["mysqldump", "-u", "usernmae", "-ppassword", "-h", "dbserver_name", database_name]) 

없이 나는 내가이 부분에 대한 올바른 구문을 알 수 있도록 나는 sqldump 내 화면에 출력 참조 sys.sdout 라인을 주석 처리합니다. 나는 print 문을 추가하고 이것이 mysqldump.txt 파일에 쓰여진 것을 볼 수있다. 하지만 완전히 실행하면 화면이나 파일에 덤프가 없습니다

아이디어가 있으십니까? 쉘 솔루션 사용을 피하려고합니다.

답변

4

sys.stdout을 수정하면 print과 같은 파이썬 수준의 명령문에만 영향을 주며 C의 하위 수준의 기록에는 영향을 미치지 않으며 특히 외부 프로그램에서 수행되는 명령문에만 영향을 미치므로 시도하지 않았습니다. 당신은 당신이 > 이렇게되면 재 지정했던처럼 파이프을 만들 수 subprocess을 말하고 싶어 :

with open("mysqldump.txt",'w') as out: 
    subprocess.check_call(["mysqldump", "-u", "usernmae", "-ppassword", 
          "-h", "dbserver_name", database_name], 
          stdout=out) 
+1

고마워요이 치료를 :-) – Rob

+0

'dbserver_name' 무엇입니까? localhost입니까? – OPV

+0

@OPV 아마도 db가 실행중인 서버의 호스트 이름입니다. mysqldump에 대한 인수가 질문에서 복사되었으므로 OP에 질문해야합니다 (또는 [설명서] (https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html# mysqldump-syntax))의 의미를 설명한다. – user4815162342

2

mysqldump에 대해 --result-file = file 인수를 사용할 수 있습니까?

이 작업을 완료하려면 check_output을 subprocess.call로 변경해야 할 수 있습니다.

또는

subprocess.call(["mysqldump", "-u", "usernmae", "-ppassword", "-h", "dbserver_name", database_name],stdout=open('myfile.txt','w')) 

편집 : 하위 프로세스가 완료된 후 MYFILE.TXT가 종료됩니다.

+0

감사합니다,이 또한 일했다. 두 가지 큰 대답, 내가 너무 오랫동안 모든 종류의 방법을 시도해 보냈다 – Rob

+0

아마 upvote – jwillis0720

+0

나는 15의 평판이 필요합니다 :-(아직 stackoverflow에 대한 새로운 – Rob