Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python脚本中运行bash命令_Python_Bash - Fatal编程技术网

如何在Python脚本中运行bash命令

如何在Python脚本中运行bash命令,python,bash,Python,Bash,我试图在bash脚本中运行Python和bash命令。 在bash脚本中,我想执行一些由Python循环包围的bash命令: #!/bin/bash python << END for i in range(1000): #execute‬ some bash command such as echoing i END #/bin/bash python使用,例如: 还有另一个函数类似于子流程.call:子流程.check\u call。这与调用完全相同,只是如果执行的命

我试图在bash脚本中运行Python和bash命令。 在bash脚本中,我想执行一些由Python循环包围的bash命令:

#!/bin/bash

python << END
for i in range(1000):
    #execute‬ some bash command such as echoing i
END
#/bin/bash
python使用,例如:

还有另一个函数类似于
子流程.call
子流程.check\u call
。这与调用完全相同,只是如果执行的命令返回非零退出代码,它会引发异常。在脚本和实用程序中,这通常是可行的行为

subprocess.check\u output
的行为与
check\u call
相同,但返回程序的标准输出


如果不需要shell功能(如变量扩展、通配符等),请不要使用shell=True(默认为shell=False)。如果使用shell=True,则shell转义是这些函数的工作,如果传递未经验证的用户输入,则它们是一个安全漏洞

os.system()也是如此——它是安全问题的常见来源。不要使用它。

查看模块。有Popen方法和一些包装函数,如
call

  • 如果需要检查输出(检索结果字符串):

  • 如果要在继续之前等待执行结束:

    exitcode = subprocess.call(args ....)
    
  • 如果您需要设置环境变量等更多功能,请使用底层Popen构造函数:

    subprocess.Popen(args ...)
    

请记住,子流程是更高级别的模块。它应该取代操作系统模块中的旧功能。

我在从IDE(PyCharm)运行时使用了它


为什么不建议使用导入操作系统?@LuisRamonRamirezRodriguez,
os.system()
提供的控制比
subprocess.Popen
接口提供的控制要少——最重要的是,它无法从代码中传递带外数据(或提供文字argv数组),这使得很难避免shell注入漏洞。@dom0,
shell=True
对于您的
子流程来说是错误的。调用([“echo”,i],shell=True)
示例:运行的shell脚本只是
echo
,没有参数,
i
作为参数传递给脚本未引用的shell。我编辑了答案,以便首先提出安全方法。
exitcode = subprocess.call(args ....)
subprocess.Popen(args ...)
import subprocess

subprocess.check_call('mybashcommand', shell=True)