Unrecognized Option in subprocess.run()

Question:

I want to run this command ebsynth -style source_photo.png -guide source_segment.png target_segment.png -output output.png.

This works perfectly in cmd but not in python subprocess.run()

Python Code

import subprocess

process = subprocess.run(['ebsynth', '-style', 'source_photo.png', '-guide', 'source_segment.png target_segment.png', '-output', 'output.png'], shell=True, cwd=dir)

Running this I am getting error: unrecognized option 'output.png'

What is the problem?

Asked By: Meet Gondaliya

||

Answers:

It looks like you’re trying to use ebsynth in Python, but it’s not being recognized as a command. The error message suggests that output.png is being treated as an option, which suggests that ebsynth is not being found.

One potential problem is that you’re not providing the correct path to ebsynth in the subprocess.run() call. You can specify the full path to ebsynth in the first element of the args list passed to subprocess.run(), like this:

process = subprocess.run(['/path/to/ebsynth', '-style', 'source_photo.png', '-guide', 'source_segment.png target_segment.png', '-output', 'output.png'], shell=True, cwd=dir)

Alternatively, you can add the directory containing ebsynth to your PATH environment variable, so that it can be found automatically. You can do this by modifying the PATH variable in your shell configuration file (e.g. .bashrc or .zshrc) or by setting the PATH variable directly in your Python code before calling subprocess.run(), like this:

import os

# Add the directory containing ebsynth to the PATH environment variable
os.environ['PATH'] = '/path/to/ebsynth: ' + os.environ['PATH']

# Now you can call ebsynth without specifying the full path
process = subprocess.run(['ebsynth', '-style', 'source_photo.png', '-guide', 'source_segment.png target_segment.png', '-output', 'output.png'], shell=True, cwd=dir)

I hope that helps! Let me know if you have any other questions.

Edit 1:

If ebsynth is being recognized and you’re still seeing the error message, it’s possible that there is a problem with the arguments you’re passing to ebsynth.

In particular, the -guide option expects two arguments: the source segmentation image and the target segmentation image. However, in your call to subprocess.run(), you’re passing the two filenames as a single argument, like this:

'-guide', 'source_segment.png target_segment.png',

This is causing the error, because ebsynth is treating the entire string (source_segment.png target_segment.png) as the filename for the source segmentation image, and it doesn’t recognize output.png as an option.

To fix this, you need to pass the two filenames as separate arguments, like this:

process = subprocess.run(['ebsynth', '-style', 'source_photo.png', '-guide', 'source_segment.png', 'target_segment.png', '-output', 'output.png'], shell=True, cwd=dir)
Answered By: Priyadarsh S S

ebsynth expects two filenames after the -guide option, but you’re passing those two filenames as a single string, so it’s using 'source_segment.png target_segment.png' as the first filename and '-output' as the second, causing output.png to be an unexpected option.

Try separating the filenames, like this:

process = subprocess.run(['ebsynth', '-style', 'source_photo.png', '-guide', 'source_segment.png', 'target_segment.png', '-output', 'output.png'], shell=True, cwd=dir)
Answered By: sj95126
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.