TypeError:无法连接'str'和'list'对象

时间:2011-11-01 16:47:21

标签: python

我有一段有效的代码:

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()

...我总是得到 TypeError:无法连接'str'和'list'对象。为什么呢?

2 个答案:

答案 0 :(得分:1)

devserver.split()返回一个列表,这就是你看到错误的原因 - 你正在尝试将字符串与列表连接起来。

您可以尝试这样做:

p = subprocess.Popen(['psftp', devserver], stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
因为你已经将cmd和args作为单独的字符串,所以不再需要

.split()

答案 1 :(得分:1)

我认为你需要更换

'psftp' +devserv.split()

('psftp' +devserv).split()

您需要先构建字符串,然后在已完成的字符串上调用split