簡體   English   中英

在python腳本中運行系統命令

[英]running a system command in a python script

我已經通過“ 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)

如果您可以將代碼格式化為代碼,將對我們有幫助; 選擇代碼部分,然后在編輯器工具欄中單擊“代碼示例”按鈕。 該圖標看起來像“ 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'

您確定在外殼程序中手動輸入命令時,Python腳本所看到的環境與您訪問的環境相同嗎? 可能是因為Python啟動命令時zip不在路徑中。

我建議的下一步是修改腳本以打印命令字符串,然后查看該字符串,看是否正確。

您可以嘗試做的另一件事是制作一個可以打印出環境變量的批處理文件,並讓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的版本號以及運行方式。

zip命令僅適用於Linux,不適用於Windows。這就是為什么它會出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM