类型错误:不能连接'str'和'list'对象
我有一段代码可以正常运行:
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
方法。