2015-05-13 58 views
0

我有一個腳本將文件寫入磁盤,然後需要使用psftp將其上載到遠程服務器。Python 3.x子流程 - 與管道進行交互以調用psftp

基於一些我看到的這個網站我有什麼,我想要做一個基本的想法,但因爲答案:

  1. 我的代碼是用Python編寫3.X

  2. 我的代碼在命令中使用了字符串和變量的組合

我還沒有成功。

這裏是我的代碼(後設置的變量)

​​

的代碼編譯,但該文件沒有得到上傳

1)什麼是我做錯了什麼? :-)

2)如何查看連接是否已建立以及實際執行的命令?

3)這是調用psftp還是perhapes的最佳方式我應該每次都寫一個批處理文件並使用「-b」標誌來調用它?

注意。我不能在我的代碼中使用任何不帶有標準Python發行版的庫。所以我必須使用psftp。

參考答案:

Can i control PSFTP from a Python script?

formatting strings for stdin.write() in python 3.x

TIA

+0

爲什麼其他圖書館像paramiko不能使用的任何具體原因?另外,你可能想看看pscp。 – shantanoo

+0

由於公司限制,我無法使用外部庫。 Scp似乎被阻塞在服務器上(我無法控制它) – eramm

+0

現在我寫了命令到一個文件並使用psftp -b但仍然想知道如何以更多python的方式做到這一點。 – eramm

回答

0

shell=True。如果prog接受它的標準輸入一個命令,你想獲得它作爲一個字節字符串輸出,那麼你可以使用subprocess.check_output()

#!/usr/bin/env python3 
from subprocess import check_output 

output = check_output([prog, "-P", port, "-pw", passwd, user + "@" + host], 
         input=("put " + upload_file).encode()) # utf8 filename 

它提出了一個異常,如果prog返回一個非零退出狀態(這通常意味着一個錯誤)。