在Python 2.7中,如何使用带有可变文件名的scp?

时间:2014-07-22 10:13:43

标签: python python-2.7

我有以下用python 2.7编写的代码行。我使用centos6作为操作系统。 现在我是python&的新手试图学习它。

以下代码行将文件夹/ 2013_06_02中的所有特定文件(即包含字母" R")从远程计算机192.168.13.152复制到我的本地计算机(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 :(得分: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中既不是有效的语法,也不是传入变量。

答案 1 :(得分: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 :(得分: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))