簡體   English   中英

Python - 為目錄中的所有文件運行 bash 腳本

[英]Python - Run a bash script for all files in a directory

我正在創建一個 Python 腳本來充當我必須執行的一些與圖像相關的常見任務的包裝器,這是我被困在的部分:

There is a Bash script someone wrote for ImageMagick which is located here: http://www.fmwconcepts.com/imagemagick/autocolor/index.php

本質上,它只能對單個文件進行操作(我不能將 *.jpg 傳遞給它,(這樣做時它會失敗)否則我不會遇到這個問題)所以我需要 Python 在每個文件上運行這一行:

~/autocolor.sh -m " + ColorMethod + " -c " + WorkingDirectory + InputFileName + " " + WorkingDirectory + OutputFileName

這是我當前的代碼塊:

elif RetouchOption == "04":
    ColorMethod = input("What method will you use (options are gamma, recolor, none)?: ")
    ClipMode = input("What clipping mode will you use (options are together or separate)?: ")
    for f in WorkingDirectory + "*.jpg":
        do
        os.system("sh ~/autocolor.sh -m " + ColorMethod + " -c " + WorkingDirectory + FileName + " " + WorkingDirectory + FileName)

WorkingDirectory 已作為變量建立,並且 ColorMethod 和 ClipMode 已在該塊中建立。 我需要做的是獲取一個 FileName 變量(或其他使此代碼工作的方法)。

謝謝您的幫助。 如果我沒有提供足夠的信息,請告訴我。 我聽說 os,system 不是執行此類操作的首選方式,但到目前為止,它在執行我在同一腳本中的其他命令時似乎運行良好。 所以我會在另一個時間解決改變它的問題。

這里有一些想法:

from glob import glob
import subprocess

elif RetouchOption == "04":
    ColorMethod = input("What method will you use (options are gamma, recolor, none)?: ")
    ClipMode = input("What clipping mode will you use (options are together or separate)?: ")
    script = ["sh", "~/autocolor.sh"]
    method = "-m %s" % ColorMethod
    clipmode = "-c %s" % ClipMode
    for filename in glob("*.jpg"):
        subprocess.call(script + [method, clipmode, filename, filename])

glob很棒,正如您所猜測的那樣, subprocess比 os.system 更受歡迎。

請注意,沒有 WorkingDirectory 的 glob 使用“腳本的當前工作目錄”。 要使其使用 WorkingDirectory,請嘗試以下操作:

import os

for filename in glob(os.path.join(WorkingDirectory, '*.jpg')):
    ...

用bash不是更好嗎?

for f in *.jpg; do ./autocolor.sh $f; done

for f in glob.glob('*.jpg'):
    do_something() 

這是對編碼的建議。 我寫了很多與 MySQL 一起使用的 Python 代碼。 我發現它有助於在變量中創建字符串並將其打印出來作為調試輔助工具,這樣您就可以看到腳本在做什么。

你會很好地回答你的問題。 他們很有幫助。

您是否考慮過使用os.listdir來獲取目錄中的所有文件?

獲得目錄中所有文件的列表后,您可以提取所有 JPG 文件並使用以下代碼從文件名末尾刪除“.jpg”:

>>> f = 'firstPic.jpg'
>>> f. replace(".jpg", '')
'firstPic'

希望這可以幫助

Python glob 模塊可以輕松創建匹配模式的列表。

例子:

    import glob
    glob.glob("*txt")

上面的代碼將返回當前目錄中所有“txt”文件的列表。

http://docs.python.org/library/glob.html

暫無
暫無

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

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