简体   繁体   English

在 subprocess.call(cmd, ...) 中运行 python 得到错误消息 /bin/sh: -c: line 0: syntax error near unexpected token `('

[英]Running python in subprocess.call(cmd, ...) get error with message /bin/sh: -c: line 0: syntax error near unexpected token `('

My code (python3 run in virtualenv )我的代码(python3 在virtualenv运行)

 try:
    cmd = "cd NST/experiments && python main.py eval  --model models/21styles.model --content-image " + directory + "/" + filename + " --style-image " + STYLE_IMAGE_UPLOAD + "wikiart/" + choose_file() + " --output-image " + OUTPUT_IMAGE_UPLOAD + filename + " --content-size 600" " --cuda=0"
    returned_value = subprocess.call(cmd, shell=True)  # returns the exit code in unix
    print('returned value:', returned_value)

  except Exception as e:
    print(e)

I got this error during run the script我在运行脚本时遇到了这个错误

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `cd NST/experiments && python main.py eval  --model models/21styles.model --content-image /Users/kanel/Documents/Developments/ML/applications/static/nst/content_image/en_20191208/20.jpg --style-image /Users/kanel/Documents/Developments/ML/applications/static/nst/style_image/wikiart/facsimile-of-may-courtly-figures-on-horseback(1).jpg --output-image /Users/kanel/Documents/Developments/ML/applications/static/nst/output_image/20.jpg --content-size 600 --cuda=0'

You have unquoted strings in the command line.您在命令行中有未加引号的字符串。 In general, it is nice to have any passed values/variables to system calls (or subprocess or etc) quoted by default or it is possible to get bugs like you have now.通常,默认情况下引用系统调用(或子进程等)的任何传递值/变量是很好的,否则可能会像现在这样出现错误。

I've a bit restructured your source code, added quoting and did it added more readability to the source code block.我对你的源代码进行了一些重组,添加了引用,并为源代码块增加了更多的可读性。

Here is the code which should work for you well :)这是应该适合您的代码:)

try:
    from pipes import quote as quote_path
except ImportError:
    from shlex import quote as quote_path

try:
    cmd = (
        "cd NST/experiments && python main.py eval  --model models/21styles.model "
        "--content-image {} "
        "--style-image {} "
        "--output-image {} "
        "--content-size 600 --cuda=0"
    ).format(
        quote_path(directory + " / " + filename),
        quote_path(STYLE_IMAGE_UPLOAD + "    wikiart / " + choose_file()),
        quote_path(OUTPUT_IMAGE_UPLOAD + filename)
    )
    returned_value = subprocess.call(cmd, shell=True)  # returns the exit code in unix
    print('returned value:', returned_value)

except Exception as e:
    print(e)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM