我有以下用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命令中使用的两个变量,以便代码自动执行复制过程;即我不必更改文件夹名称和没有。每次都用手工制作文件名。
我知道每次我必须输入密码到远程机器,如果上面的代码行工作。但此刻我并不关心这一点。首先,我希望将代码行置于工作状态之上。然后我想知道如何在不输入密码的情况下完成上述工作。
任何帮助都将受到高度赞赏。 提前谢谢。
答案 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))