2017-12-22 20 views
0

를 예상대로 내가, 간단한 스크립트를 파이썬 파이썬 스크립트가 오류없이 실행subprocess.call는

subprocess.call([ 
    'sqlcmd', 
    '-S', 'server_name', 
    '-d', 'db name' 
    '-i', r'path to the script + script name' 
    ]) 

에서 SQL 스크립트를 호출하는 실행되지하지만, SQL 스크립트를 호출하지 않습니다. 명령 줄 sqlcmd "path to the script + script name" 통해 SQL 스크립트를 실행할 수 있으며 예상대로 작동합니다.

나는 아무 문제로 subprocess 모듈을 사용하여 저장 프로 시저를 호출

subprocess.Popen([ 
     'sqlcmd', 
     '-S', 'server_name', 
     '-d', 'db name' 
     '-Q', 'exec stored procedure' 
    ]) 

하지만 별도의 스크립트를 호출하면 어떤 결과를 얻을 수 있습니다. shell = True을 포함하여 시도했거나 Popen을 사용했지만 아무 것도 변경되지 않았습니다.

더 많은 테스트를 수행하기 위해 현재 데이터베이스의 이름 만 반환하는 테스트 스크립트를 만들었습니다. 명령 줄에서 아무런 문제가없이 sqlcmd -S server_name -d db_name -i "directory/test1.sql"으로 실행하여 예상 결과를 얻었습니다. subprocess 모듈을 실행하려고 시도하고 다시 내 문제가 발생했습니다. subprocess.call_check을 시도했으며 exit status 1이라는 오류가 발생했습니다. 따라서 스크립트는 명령 행으로 실행되지만, subprocess 모듈로는 실행되지 않습니다.

+0

어떤 일이 * 발생합니까? 오류가 있습니까? 아니면 단순히 아무것도하지 않습니까? '-i'에 전달할 인수가 정확한지 확신합니까? 확인해 봤어? – larsks

+0

subprocess.call 전후에'print' 문을 넣으면 두 문이 모두 출력되고 오류는 발생하지 않습니다. '-i'의 인수는 올바른 것입니다. 왜냐하면 명령 행'sqlcmd '에서 스크립트 + 스크립트 이름'을 통해 똑같은 인수를 실행할 때 스크립트가 실행되기 때문입니다. '-i'의 인수가 올바르지 않으면 에러가 발생합니다. – AK9309

답변

1

내 문제는 sql 스크립트의 전체 경로를 지정 했더라도 sql 스크립트 및 python 스크립트에 대한 디렉토리 문제였습니다. 그들은 별개의 디스크에 있었고, 을 사용할 때 나는 계속 non-zero exit status 1을 얻고있었습니다. 두 스크립트를 같은 위치에두고 문제가 없어졌습니다.