2011-11-01 87 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作为单独的字符串。

相关问题