Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Python subproccess Popen python executable not found

from datetime import datetime
from shutil import copyfile
import shutil
import subprocess
import os
import sys

import os
from distutils.dir_util import copy_tree
from datetime import datetime

# Getting the current date and time
dt = datetime.now()

# getting the timestamp
ts = datetime.timestamp(dt)

folders = os.listdir("../..")

os.mkdir("../../backup/"+str(ts))


for folder in folders:
    if folder.lower() != "backup":
        copy_tree("../../"+folder, "../../backup/"+str(ts)+"/"+folder)

#shutil.make_archive("../../backup/"+str(ts), 'zip', "../../backup/"+str(ts))
#os.remove("../../backup/"+str(ts))

ui_main_dir = os.path.abspath("../../ui")
py_from_ui_dir = os.path.abspath("../compiled_ui")

#2. Compile all ui files and qrc file with pyuic5 command.
def parse_directory_2(path):
    path_contents = os.listdir(path)
    if os.path.exists(path.replace(ui_main_dir,py_from_ui_dir))==False:
        os.mkdir(path.replace(ui_main_dir,py_from_ui_dir))
    for path_content in path_contents:
        if os.path.isdir(path+"/"+path_content):
            parse_directory_2(path+"/"+path_content)
        else:
            original_path = path+"/"+path_content
            extension = original_path.split(".")[-1].lower()
            if extension == "ui":
                saved_path = original_path.replace(".ui",".py").replace(ui_main_dir,py_from_ui_dir)
                process = subprocess.Popen("python -m PyQt5.uic.pyuic -x \""+original_path+"\" -o \""+saved_path+"\"", shell=False)   
                process.wait()
                folder_depth = saved_path.count("/")-1
                folders_back = ""
                for i in range(0,folder_depth):
                    folders_back +="../"
                py_file = open(saved_path,"r+",encoding="utf-8")
                contents = py_file.read()
                contents = contents.replace("import Εικόνες προγράμματος_rc","import sys\nimport importlib\nsys.path.append(\""+folders_back+"\")\nicons = importlib.import_module(\"Κεντρικό παράθυρο προγράμματος και αρχείο qrc (Main window and qrc).Εικόνες προγράμματος\")")
                py_file.seek(0)
                py_file.write(contents)
                #py_file.flush()
                py_file.close()
            elif extension=="qrc":
                saved_path = original_path.replace(".qrc",".py").replace(ui_main_dir,py_from_ui_dir)
                subprocess.Popen("python -m PyQt5.pyrcc_main \""+original_path+"\" -o \""+saved_path+"\"", shell=False)

parse_directory_2(ui_main_dir)

At the second part (#2) of the above script (function: parse_directory_2) i call pyuic5 to compile PyQt5 ui files (maked with Qt Designer) to .py files.

The error is:

chris@chris-Inspiron-3847:~/Documents/Projects/papinhio-player/src/python$ python compile-and-backup.py 
Traceback (most recent call last):
  File "/home/chris/Documents/Projects/papinhio-player/src/python/compile-and-backup.py", line 64, in <module>
    parse_directory_2(ui_main_dir)
  File "/home/chris/Documents/Projects/papinhio-player/src/python/compile-and-backup.py", line 40, in parse_directory_2
    parse_directory_2(path+"/"+path_content)
  File "/home/chris/Documents/Projects/papinhio-player/src/python/compile-and-backup.py", line 46, in parse_directory_2
    process = subprocess.Popen("/usr/bin/python3.9 -m PyQt5.uic.pyuic -x \""+original_path+"\" -o \""+saved_path+"\"", shell=False)
  File "/usr/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.9/subprocess.py", line 1821, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'python -m PyQt5.uic.pyuic -x "/home/chris/Documents/Projects/papinhio-player/ui/main-window/wrong-url-address.ui" -o "/home/chris/Documents/Projects/papinhio-player/src/compiled_ui/main-window/wrong-url-address.py"'

but after that if i manually run python -m PyQt5.uic.pyuic -x "/home/chris/Documents/Projects/papinhio-player/ui/main-window/wrong-url-address.ui" -o "/home/chris/Documents/Projects/papinhio-player/src/compiled_ui/main-window/wrong-url-address.py" no error oquered and the py file is maked.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

So, i think is python path error.

I tried with /usr/bin/python3.9 (alias python) but the same error is displaied.

Any thoughts?

>Solution :

You’ve made a very common subprocess mistake. You have passed a string to Popen, when you should always pass a list of commands.

For example:

import subprocess

subprocess.Popen(["python3", "-c", "print('Hello world')"])

Rather than what you have:

import subprocess

subprocess.Popen(["python3 -c print('Hello world')"])

Which gives me a very similar error:

Traceback (most recent call last):
  File "/Users/x/x.py", line 4, in <module>
    subprocess.Popen(["python3 -c print('Hello world')"])
  File "/opt/homebrew/Cellar/python@3.9/3.9.9/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/opt/homebrew/Cellar/python@3.9/3.9.9/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 1821, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: "python3 -c print('Hello world')"

I am using this example instead of your code for simplicity and also because your code depends on local files.. but the principle applies.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading