类型错误:不能连接'str'和'list'对象

0 投票
2 回答
3034 浏览
提问于 2025-04-17 05:26

我有一段代码可以正常运行:

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 个回答

1

devserver.split() 返回的是一个列表,这就是你看到那个错误的原因——你试图把一个字符串和一个列表拼接在一起。

你可以试试这个:

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

.split() 这个方法已经不需要了,因为你已经把命令和参数分开成了两个字符串。

1

我觉得你需要把

'psftp' +devserv.split()

换成

('psftp' +devserv).split()

你需要先把字符串拼接好,然后再对拼接好的字符串使用 split 方法。

撰写回答