我正在创建一个Python脚本,作为我必须做的一些常见图像相关任务的包装器,这里是我被困住的部分:
有人为ImageMagick写了一个Bash脚本,它位于: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并不是做这样的事情的首选方式,但是到目前为止它在执行我在同一个脚本中的其他命令时似乎运行良好,所以我将在另一时间解决这个问题。
答案 0 :(得分:1)
以下是一些想法:
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')):
...
答案 1 :(得分:1)
使用bash不是更好吗?
for f in *.jpg; do ./autocolor.sh $f; done
答案 2 :(得分:0)
for f in glob.glob('*.jpg'):
do_something()
答案 3 :(得分:0)
这是编码的建议。我编写了许多适用于MySQL的Python代码。我发现它有助于在变量中创建字符串并将其打印出来作为调试辅助工具,因此您可以看到脚本正在做什么。
您可以使用之前问题的答案。他们非常乐于助人。
答案 4 :(得分:-1)
您是否考虑过使用os.listdir
获取目录中的所有文件?
如果您有目录中所有文件的列表,您可以提取所有JPG并使用以下代码从文件名末尾删除“.jpg”:
>>> f = 'firstPic.jpg'
>>> f. replace(".jpg", '')
'firstPic'
希望这有帮助
答案 5 :(得分:-1)
Python glob模块可以轻松创建与模式匹配的列表。
示例:
import glob
glob.glob("*txt")
上面的代码将返回当前目录中所有“txt”文件的列表。