python - WindowsError[error 5] Acceso denegado
subprocess (5)
¿Especifica la ruta completa al ejecutable que está pasando a Popen
(el primer elemento en argv
)?
Estoy usando el paquete killableprocess (creado sobre el subproceso) para ejecutar procesos Siempre que ejecuto el fragmento de código "killableprocess.Popen (comando)" en mi script, aparece el siguiente error:
File "killableprocess.py", line 157, in _execute_child
winprocess.AssignProcessToJobObject(self._job, hp)
File "winprocess.py", line 37, in ErrCheckBool
raise WinError()
WindowsError [error 5] Access is denied
Exception TypeError: "''NoneType'' object is not callable" in <bound method AutoHANDLE.__del__ of <AutoHANDLE object at 0x025D42B0>> ignored
Pero cuando lo ejecuto desde la consola interactiva de python (python 2.6) funciona bien. Eso probablemente significa que hay problemas de permisos cuando ejecuto esto desde el script, pero no sé cómo resolverlos. Intenté ejecutar el script desde un cmd que ejecuté como administrador, pero no ayudó. Intenté buscar publicaciones similares pero no encontré ninguna buena solución. Espero encontrar ayuda aquí. Estoy ejecutando Windows, específicamente Windows 7 Ultimate x64, si es que me sirve de ayuda.
Gracias
Alternativamente, si su módulo no funciona, puede usar el módulo «subproceso»:
import subprocess, os, time
process = subprocess.Popen("somecommand", shell=True)
n = 0
while True:
if not process.poll():
print(''The command is running...'')
if n >= 10:
pid = process.pid()
os.kill(pid, 9) # 9 = SIGKILL
else:
print(''The command is not running..'')
n += 1
time.sleep(1)
Asegúrese de que sus rutas incluyan el nombre del archivo ejecutable (inkscape.exe)
Lo que encontré cuando me encontré con esto con el módulo de subproceso es que la primera entrada en ''args'' (el primer parámetro para subprocess.Popen()
) solo tenía que ser el nombre del ejecutable sin ruta y yo necesitaba establecer el executable
en el argumento Lista a la ruta completa de mi ejecutable.
app = ''app.exe''
appPath = os.path.join(BIN_DIR, app)
commandLine = [app, ''arg1'', ''arg2'']
process = subprocess.Popen(commandLine, executable=appPath)
Resolví un problema similar que tuve al cambiar al directorio de procesos (estaba tratando de usar inkscape) y resolvió mi problema
import subprocess
inkscape_dir=r"C:/Program Files (x86)/Inkscape"
assert os.path.isdir(inkscape_dir)
os.chdir(inkscape_dir)
subprocess.Popen([''inkscape.exe'',"-f",fname,"-e",fname_png])
Tal vez el cambio al directorio de procesos también funcione para usted.