2013-04-21 62 views
-3

我试图编写一些文件分发脚本: 脚本接收文件/目录以var'filename'的形式分发,目标路径为'path',然后应该运行srv.list中列出的所有服务器,并将文件/ dir分配给每个服务器。另外还有那个在用户输入是dir而不是文件时使用的ropt。Python - 语法错误。 TypeError:无法连接'str'和'int'对象

#!/usr/bin/python 
import os 
dirList = os.listdir("./") 
srvlist = os.system("cat srv.lst") 
filename = raw_input("Please enter file/dir to distribute") 
path = raw_input("Please enter destination path") 
ropt =() 
for d in dirList: 
    if os.path.isdir(d) == True: 
     ropt = "-r" 
     os.system("/usr/bin/scp " (ropt)"-- "(filename)" "(srvlist)":"(path) 
    else: 
     os.system("/usr/bin/scp "(filename)" "(srvlist)":"(path)) 

输出:

Please enter file/dir to distribute: 1.py 
Please enter destination path: /root/ 
Traceback (most recent call last): 
    File "1.py", line 13, in ? 
    os.system("/usr/bin/scp "+filename+" "+srvlist+":"+path) 
TypeError: cannot concatenate 'str' and 'int' objects 
[[email protected] distribute]# 
+0

你有什么错误?你的hashbang(#!python)似乎不是正确的。 – 2013-04-21 14:47:50

+0

通常,在将用户输入传递给shell命令之前不进行消毒是一个不好的主意。 – 2013-04-21 14:49:19

+0

我问的问题,因为我试图学习,如果你来,至少写下我的问题,至少写下为什么。 – 2013-04-21 14:54:01

回答

2

这行肯定是无效的:

os.system("/usr/bin/scp " (ropt)"-- "(filename)" "(srvlist)":"(path) 

它缺少培训括号。

我不知道你想要做什么,但假设你解决这个错误,也许你可以使用插值):

os.system("/usr/bin/scp %s -- %s %s:%s" % (ropt, filename, srvlist, path)) 
+0

你是对的,我在最后加了一个')'的行,但它仍然无法正常工作,我编辑了错误输出的问题 – 2013-04-21 14:50:44

2
os.system("/usr/bin/scp "+ ropt+"-- "+filename+" "+srvlist+":"+path) 

+标志用于级联

相关问题