我有一段有效的代码:
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'对象。为什么呢?
答案 0 :(得分:1)
devserver.split()
返回一个列表,这就是你看到错误的原因 - 你正在尝试将字符串与列表连接起来。
您可以尝试这样做:
p = subprocess.Popen(['psftp', devserver], stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
因为你已经将cmd和args作为单独的字符串,所以不再需要
答案 1 :(得分:1)
我认为你需要更换
'psftp' +devserv.split()
与
('psftp' +devserv).split()
您需要先构建字符串,然后在已完成的字符串上调用split
。