subprocess.popen и subprocess.run, при вызове file.py, оба выдают ошибку импорта в Linux.Python 3.6.4 в Linux.Python 3.6.5 для Windows.Windows работает без проблем.Linux выдает ошибку.Вызовы должны быть независимыми и невидимыми для исходного процесса / сценария.
Для Linux (любая из следующих строк):
proc = subprocess.run("python3 foo.py", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
proc = subprocess.Popen("python3 foo.py", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
Для Windows (любая из следующих строк):
proc = subprocess.run("python bar.py", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
proc = subprocess.Popen("python bar.py", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
Также обратите внимание, что при запускеотдельные сценарии работают без инцидентов;только когда вы вызываете его из другого скрипта, он выдает ошибки.Любые идеи?
РЕДАКТИРОВАТЬ: Например, предположим, что это foo.py:
import requests, urllib.request as urllib2, wget, ftplib, sys, tkinter as tk, tkinter.ttk as ttk, serial, threading, platform, time, socket, os, json, struct, logging, pickle, re, queue, subprocess, uuid, netifaces as nif, zipfile, ctypes
from platform import system as OS_VER
from PIL import Image, ImageTk
LibList = [requests, urllib2, wget, ftplib, sys, tk, ttk, serial, threading, platform, time, socket, os, json, struct, logging, pickle, re, queue, subprocess, uuid, nif, zipfile, ctypes, Image, ImageTk, platform]
for x in range(len(LibList)):
try: print(LibList[x].__file__)
except: print(LibList[x])
И это bar.py
proc = subprocess.Popen("python3 foo.py", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
Run bar.py и foo.py получают ошибку в Linux, но не в Windows.Пропустите bar.py и запустите foo.py, но он отлично работает в Linux.