有人能告诉我这段代码有什么问题:
#!/usr/local/bin/python
import os
import string, sys
a='sys.argv[1]'
b='sys.argv[2]'
os.system("scp a:/export/home/sample/backup.sql b:/home/rushi/abc.sql")
它给出了以下错误:
ssh: a: node name or service name not known
答案 0 :(得分:5)
出了什么问题:
a
和b
没有您想要的sys.argv
的第二和第三个值a
和b
与os.system
电话os.system
如何解决:
a = sys.argv[1]
,b
相同。.format
方法或类似%
格式化字符串subprocess
模块string
答案 1 :(得分:2)
第一行的第一个字符应为#
。
答案 2 :(得分:1)
您已将名称“a”和“b”绑定到命令行上传递的参数(实际上,如果您在等号后删除了引号,则可以这样做)。
但是在你正在执行的命令中,你没有使用它们,你正在使用文字“a”和“b”驱动器。 这是一种危险的方法,因为您有注射风险。在任何情况下,如果您信任输入的来源,则可以转义a和b的值,例如
os.system("scp %s:/export/home/sample/backup.sql %s:/home/rushi/abc.sql" % (a, b))
这不是推荐的方法。
答案 3 :(得分:1)
您的代码应更改为此
a=sys.argv[1]
b=sys.argv[2]
由于您现在通过添加引号
将sys.argv [1]视为字符串你也想这样做:
os.system("scp %s:/export/home/sample/backup.sql %s:/home/rushi/abc.sql" % (a,b) )
以便将变量添加到您尝试使用os.system调用的字符串