在Python 2.7中,如何使用scp和变量文件名?
我在使用Python 2.7写代码,操作系统是CentOS 6。现在我刚开始学习Python。
下面这段代码可以把远程机器192.168.13.152上/2013_06_02文件夹里所有包含字母“R”的特定文件复制到我的本地机器上 (tony是我本地机器的用户名,而john是远程机器的用户名)。
os.system("scp john@192.168.13.152:/home/john/2013_06_02/11_RBPLJ1635+3808*R* /home/tony/data/")
这段代码可以正常工作。(这段代码会要求输入密码)。我可以在本地机器的/data目录下找到这些特定文件。
现在的问题是:其实我在远程机器上有很多文件夹,每个文件夹里都有很多文件名包含字母“R”。而且每个文件名的开头都有一些数字,比如上面的例子是11。现在我想改变文件夹的名字,同时也想改变文件名前面的数字。
我试过这样做:
date = "2013_10_05"
mynum = "11"
os.system("scp john@192.168.13.152:/home/john/date/mynum_RBPLJ1635+3808*R* /home/tony/data/")
但是我遇到了这个错误:
SyntaxError: EOL while scanning string literal
我也试过这种方式:
date = "2013_10_05"
mynum = "11"
os.system("scp john@192.168.13.152:/home/john/"date"/"mynum"_RBPLJ1635+3808*R* /home/tony/data/")
但这也没有成功。
总之,我需要把文件夹名和文件前面的数字变成两个变量,这样在scp命令中使用,就可以自动化复制过程;也就是说,我不需要每次手动更改文件夹名和文件名中的数字。
我知道每次运行这段代码时都需要输入远程机器的密码,但我现在不太在意这个。首先,我想让上面的代码能够正常工作。然后我想看看如何在不每次输入密码的情况下完成这个操作。
任何帮助都会非常感谢。提前谢谢大家。
3 个回答
0
还有一种运行的方法是:
date = "2013_10_05"
mynum = "11"
os.system("scp john@192.168.13.152:/home/john/%s/%s_RBPLJ1635+3808*R* /home/tony/data/" %(date, mynum))
1
使用字符串格式化。
date = "2013_10_05"
mynum = "11"
os.system("scp john@192.168.13.152:/home/john/{}/{}_RBPLJ1635+3808*R* /home/tony/data/".format(date, mynum))
我建议你看看 fabric。这个工具在这方面非常好用。
2
使用 str.format 方法可以传入变量:
date = "2013_10_05"
mynum = "11"
os.system("scp john@192.168.13.152:/home/john/{}/{}_RBPLJ1635+3808*R* /home/tony/data/".format(date,mynum))
在这里:
os.system("scp john@192.168.13.152:/home/john/"date"/"mynum"_RBPLJ1635+3808*R* /home/tony/data/")
这个写法里面有双引号嵌套在双引号里,这在Python中既不合法,也无法正确传入变量。