在python脚本中运行系统命令

时间:2009-11-10 20:28:59

标签: python

我一直在阅读“Python的一个字节”来学习语法和方法等......

我刚开始使用简单的备份脚本(直接来自本书):

#!/usr/bin/python

# Filename: backup_ver1.py

import os

import time

# 1. The files and directories to be backed up are specified in a list.
source = ['"C:\\My Documents"', 'C:\\Code']

# Notice we had to use double quotes inside the string for names with spaces in it.
# 2. The backup must be stored in a main backup directory
target_dir = 'E:\\Backup' # Remember to change this to what you will be using

# 3. The files are backed up into a zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'


# 5. We use the zip command to put the files in a zip archive
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))


# Run the backup

if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

是的,它失败了。如果我在终端中运行zip命令它工作正常。我认为它失败了,因为zip_command实际上从未运行过。我不知道如何运行它。

只需输入zip_command即可。 (我使用的是python 3.1)

4 个答案:

答案 0 :(得分:1)

如果您可以将代码格式化为代码,那将对我们有所帮助;选择代码部分,然后单击编辑器工具栏中的“代码示例”按钮。图标看起来像“101/010”,如果您将鼠标指针放在上面,黄色的“工具提示”框会显示“代码示例< pre>< / pre> Ctrl + K”

我刚尝试过,如果您将代码粘贴到StackOverflow编辑器中,带有“#”的行将为粗体。所以粗线是评论。到目前为止一切都很好。

您的字符串似乎包含反斜杠字符。您需要将每个反斜杠加倍,如下所示:

target_dir = 'E:\\Backup'

这是因为Python专门处理反斜杠。它引入了一个“反斜杠转义”,它允许您在引用的字符串中放置引号:

single_quote = '\''

您还可以使用Python“原始字符串”,它具有更简单的反斜杠规则。原始字符串由r"r'引入,分别由"'终止。示例:

# both of these are legal
target_dir = r"E:\Backup"
target_dir = r'E:\Backup'

答案 1 :(得分:1)

在shell中手动输入命令时,您确定Python脚本看到了您可以访问的相同环境吗?当Python启动命令时,可能是zip不在路径上。

答案 2 :(得分:0)

我建议的下一步是修改脚本以打印命令字符串,然后查看字符串并查看它是否正确。

您可以尝试的另一件事是创建一个打印出环境变量的批处理文件,让Python运行它,并查看环境的样子。特别是PATH。

以下是一个建议的示例:

set
echo Trying to run zip...
zip

将它们放在名为C:\mytest.cmd的批处理文件中,然后让你的Python代码运行它:

result_code = os.system("C:\\mytest.cmd")
print('Result of running mytest was code', result_code)

如果它有效,你会看到打印出的环境变量,然后它会回显“试图运行zip ...”,然后如果zip运行它会打印一条带有zip版本号的消息以及如何运行它

答案 3 :(得分:0)

zip命令只适用于linux而不适用于Windows ..这就是为什么它会出错...