2014-02-26 110 views
0

有人可以幫助我在python中執行下面的代碼行嗎?在python中運行linux和SQL命令

cat /home/dbadmin/super_app/data/file_name.spool | vsql database -U user -w 'password' -c "copy schema.table from stdin direct no escape null as '\N'" 
+3

提示:'subprocess','shell = True'。 – devnull

回答

0

Python的subprocess庫支持管道。下面的代碼僅僅是documentation example修改了一下:

from subprocess import Popen, PIPE 

p1 = Popen(["cat", "/home/dbadmin/super_app/data/file_name.spool"], 
      stdout=PIPE) 
p2 = Popen(["vsql", "database", "-U", "user", "-w", "password", 
      "-c", "copy schema.table from stdin direct no escape null as '\\N'"], 
      stdin=p1.stdout, 
      stdout=PIPE) 
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. 
output = p2.communicate()[0] 

我沒有測試上面的代碼,所以可能有一些錯別字。

0

這是Python的優秀subprocess庫中的完美的工作。你可以像這樣運行shell命令:

subprocess.call("YOURCOMMANDHERE", shell=True) 

這將返回一個returncode所以你知道,如果命令成功地完成。如果需要從命令輸出,則可以使用不同的子進程功能:

subprocess.check_output("YOURCOMMANDHERE") 

這將以字符串形式返回命令輸出。閱讀關於此庫的更多信息in the python docs