2011-11-01 103 views
0

我有一個代碼片段,其工作原理:類型錯誤:不能連接「海峽」和「名單」對象

p = subprocess.Popen('psftp servername'.split(),stdin=subprocess.PIPE, tdout=subprocess.PIPE, shell=True) 
p.stdin.write('lcd P:\\ORACLE_UNIX\\Development\n')  
p.stdin.write('get //opt//jboss//current//server//default//conf//DMS.properties\n')  
p.stdin.write('bye\n')  
p.stdout.close()  
p.stdin.close() 

但是,當我有一個變量集(我會參考其他地區的服務器) :

devserv='servername' 
p = subprocess.Popen('psftp' +devserv.split(),stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) 
p.stdin.write('lcd P:\\ORACLE_UNIX\\Development\n')  
p.stdin.write('get //opt//jboss//current//server//default//conf//DMS.properties\n')  
p.stdin.write('bye\n')  
p.stdout.close()  
p.stdin.close() 

...我總是得到類型錯誤:不能連接 '海峽' 和 '名單' 對象。爲什麼?

回答

1

我認爲你需要

('psftp' +devserv).split()

您需要先構建字符串,然後調用已完成的字符串split更換

'psftp' +devserv.split()

+0

這已經解決了我的問題,非常感謝您的幫助 – geekcomputers

1

devserver.split()返回一個列表,這就是爲什麼你看到這個錯誤 - 你試圖連接一個字符串與列表。

你可以代替試試這個:

p = subprocess.Popen(['psftp', devserver], stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) 

.split()不再需要,因爲你已經擁有了CMD和args作爲單獨的字符串。

相關問題