Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';我的python代码中有什么错误?_Python - Fatal编程技术网

什么';我的python代码中有什么错误?

什么';我的python代码中有什么错误?,python,Python,有人能告诉我这段代码有什么问题吗: #!/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 第一行的第一个字符应该是#怎么了

有人能告诉我这段代码有什么问题吗:

#!/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

第一行的第一个字符应该是
#

怎么了:

  • a
    b
    没有您想要的第二个和第三个值
    sys.argv
  • a
    b
    os.system
    调用无关
  • 您正在使用
    os.system
  • 您正在导入未使用的模块
  • 如何修复:

  • 使用不带引号的
    a=sys.argv[1]
    ,与
    b
    相同
  • 使用
    .format
    方法或类似的
    %
    格式化字符串
  • 查看
    子流程
    模块
  • 不导入
    字符串
  • 您已经将名称“a”和“b”绑定到命令行上传递的参数上(实际上,如果您删除了等号后面的引号,),您就会这样做)

    但是在您正在执行的命令中,您没有使用它们,而是使用文字“a”和“b”驱动器。 这是一种危险的方法,因为你有注射的风险。在任何情况下,如果您信任输入的来源,您可以转义a和b的值,类似于

    os.system("scp %s:/export/home/sample/backup.sql  %s:/home/rushi/abc.sql" % (a, b))
    

    这不是推荐的方法。

    您的代码应更改为此

    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调用的字符串中,至少试着写英语,而不是说英语,好吗?此外,此代码有什么问题?你有错误吗?有些东西不起作用吗?代码应该怎么做?我写了上面的错误…你能不能检查一下这个错误..代码应该接受用户名和machinename作为命令行参数..例如root@10.45.34.33. 并在两个给定的命令行参数之间传输文件。是否要将用户名和计算机名作为参数传递到脚本中,并在它们之间传输文件(无论是什么)?这没有意义。它现在给出了以下错误:权限被拒绝(公钥、键盘交互)。失去连接您需要包括用户名和密码。我假设“a”在本地计算机上,“b”在远程计算机上。远程地址应该如下所示username@something.com:/home/rushi/abc.sql如果需要使用身份验证,则必须添加包含私钥的身份文件。输入“man scp”以获取该命令的文档,或在此处: