【问题标题】:ImageMagick Conversion from .ps to .png, run from python - invalid param从 .ps 到 .png 的 ImageMagick 转换,从 python 运行 - 无效参数
【发布时间】:2016-01-21 19:52:44
【问题描述】:

我一直在浏览一些类似的帖子和 ImageMagick 页面,但似乎找不到问题的原因:

注意我使用的是windows机器。

我在一个文件夹中有一个 .ps 图像,当使用从 cmd 转换它的命令运行时它可以工作:convert saved.ps newsaved.png

但是当我尝试使用以下代码从我的 python 脚本中执行它时:

args = ["convert","saved.ps newsave.png"] subprocess.Popen(args) #or this call(args) os.system("start newsave.png")

cmd 窗口显示 newsave.png 是无效参数。 (错误信息是:cmd窗口中的Invalid parameter - newsave.png,然后立即关闭)

args 中用逗号分隔所有内容也无济于事。 os.getcwd() 也返回当前工作目录,所以我知道我在正确的目录中。调用子进程时发生错误。

【问题讨论】:

  • 如果你用这个args = ['convert', 'saved.ps', 'newsave.png']subprocess.Popen(args)怎么办?因为如果 saved.ps 在工作目录中,那对我来说很好。您可以使用 import os os.getcwd() btw 打印您当前的工作目录。
  • 您使用的是 Windows。可能您尝试运行 ImageMagick 的 convert 命令实际上是在运行 Windows convert 命令,该命令试图将硬盘分区从 FAT 转换为 NTFS 格式。尝试使 args 的第一个参数成为 ImageMagick convert 命令的完整路径。
  • 当直接从 cmd 使用它时它工作正常,当试图从 python 调用它时它会导致问题。
  • 这两种情况下的搜索路径可能不同。试一试。
  • 抱歉,我的 Windows 技能欠缺。找出安装 ImageMagick 时可执行命令 convert 的安装位置。与此同时,这里有一个不为人知的可能性:尝试在对subprocess.callsubprocess.Popen 的调用中添加shell=True。我不知道这是否会有所作为,而且我没有方便测试的 Windows 安装。

标签: python cmd postscript imagemagick-convert


【解决方案1】:

最后我必须添加 shell=True 才能使转换正常工作。

args = ["convert", "saved.ps", "newsave.png"] subprocess.call(args, shell=True)

感谢Warren 的帮助。

【讨论】:

    【解决方案2】:

    使每个命令行参数成为args 的单独元素。另外,在调用os.system("start newsave.png")之前,使用subprocess.call确保convert函数已经完成:

    args = ["convert", "saved.ps", "newsave.png"]
    rc = subprocess.call(args)
    if rc != 0:
        print "rc =", rc
    

    【讨论】:

    • 它仍然告诉我 newsave.png 是一个无效参数
    • 奇怪。它适用于我(Python 2.7.10、imagemagick 6.8.3-3、Mac OS X)。您可以编辑问题以包含 complete 错误消息吗?是调用subprocess.Popen(args)还是os.system("start newsave.png")出现错误?此外,您似乎应该使用subprocess.call 而不是subprocess.Popen,以确保convert 命令在调用os.system("start newsave.png") 之前完成。
    • 即使没有os.system("start newsave.png"),我仍然会收到错误消息,并且错误消息的全部内容是:Invalid parameter - newsave.png,我现在将尝试使用subprocess.call,让您知道这是怎么回事
    • 当你这样做时,检查call的返回值。
    • 抱歉,这是一个愚蠢的问题,但我该怎么做呢?如果它与print(subprocess.call(args)) 一起使用,那么输出为 4?
    猜你喜欢
    • 2013-04-24
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多