Si sleep.shtiene el shebang #!/bin/shy tiene los permisos de archivo adecuados, ejecútelo chmod u+rx sleep.shpara asegurarse de que esté dentro, $PATHentonces su código debería funcionar como está:
import subprocess
rc = subprocess.call("sleep.sh")
Si el script no está en la RUTA, especifique la ruta completa, por ejemplo, si está en el directorio de trabajo actual:
from subprocess import call
rc = call("./sleep.sh")
Si el script no tiene shebang, debe especificar shell=True:
rc = call("./sleep.sh", shell=True)
Si el script no tiene permisos ejecutables y no puede cambiarlo, por ejemplo, al ejecutarlo os.chmod('sleep.sh', 0o755), puede leer el script como un archivo de texto y pasar la cadena al subprocessmódulo en su lugar:
with open('sleep.sh', 'rb') as file:
script = file.read()
rc = call(script, shell=True)