首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有shell=True的subprocess.run似乎实际上不能在shell中运行

带有shell=True的subprocess.run()函数用于在shell环境中执行命令。然而,根据Python官方文档的建议,使用带有shell=True的subprocess.run()函数存在一些安全风险,可能会导致命令注入攻击。

在使用subprocess.run()函数时,应该尽量避免使用shell=True参数,而是采用传递命令和参数列表的方式来执行命令。例如:

代码语言:txt
复制
import subprocess

command = ["ls", "-l"]
result = subprocess.run(command, capture_output=True, text=True)
print(result.stdout)

上述代码将执行"ls -l"命令并将结果输出。参数capture_output=True用于捕获命令的输出,而text=True用于将输出以文本字符串的形式返回。

通过这种方式,可以避免潜在的安全风险,并且能够更好地控制和处理命令执行过程中的各种情况。

关于subprocess模块的更多信息和用法,请参考Python官方文档:subprocess --- 子进程管理

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python子进程subpocess原理及用法解析

我们可能理解:多开一个进程运行某个python函数(如果只想实现这个功能,请使用multiprocessing包) 正确理解:python通过shell/cmd 打开一个新程序进程,而不限于python...函数,比如我们可以开一个“ls”指令进程列出当前文件夹下文件,这个“ls”指令明显是一个shell通用函数,而不是python 函数: # 打开子进程运行“ls”。...=True) #shell=True 为必须,否则stdout无法读出 pp = subprocess.Popen(["python", "test_print.py", "d4", "e5", "f6..."], stdout=subprocess.PIPE, shell=True) print(p.stdout.read()) print(pp.stdout.read()) 然而此时,输出结果是二进制文件...(["python", "test_print.py", "a1", "b2", "c3"], stdout=subprocess.PIPE, shell=True) #shell=True 为必须,否则

93610
  • python模块之sys和subproc

    函数,带有一个可选整数参数返回给调用它程序,表示你可以在主程序捕获对sys.exit调用。...模块(sys模块升级版,常用) subprocess.run()   作用:运行命令,返回命令执行结果(python3.5以后版本才会有这个命令)   subprocess.call()   作用...() #作用:运行命令,返回命令执行结果(python3.5以后版本才会有这个命令) #r1=subprocess.run("dir",shell=True) #subprocess想调用cmd内置命令...,需要加上参数shell=True #r2=subprocess.run("ping www.baidu.com") #ping程序是一个单独程序,subprocess可以直接调用 #print(r1...) #print(r2) #subprocess.call() #作用:执行命令,返回命令状态,0或者非0,0表示执行成功,1表示执行失败 #r1=subprocess.call("dir",shell

    74130

    python执行系统命令

    (['ls','-l'])# 运行状态,运行成功返回0>>> cmd.returncode0 上述代码通过一个列表来记录执行命令,软件名称,选项,参数等都对应列表一个元素。...当然你也可以直接使用字符串参数,用法如下 >>> cmd = subprocess.run('ls -l', shell = True) 注意,必须设置shell参数值为True才可以支持字符串写法,...参数真正作用是交给系统shell脚本来执行命令,比如复杂linux命令 >>> subprocess.run('cat config.txt | grep "samples" | cut -f1...> a.txt', shell = True) 除了单纯执行系统命令外,有时我们还希望得到执行后结果,此时写法如下 >>> cmd = subprocess.run('ls -l', shell =...另外,还支持限定执行时间,如果超时,则报错,写法如下 >>> cmd = subprocess.run('ls -l', shell = True, timeout = 100) time参数单位为秒

    1.7K10

    Pythonos.system()、subprocess.run()、call()、check_output()用法

    用作 stdout, stderr 参数值时,可以从返回值对象 stdout 和 stderr 属性读取输出内容 subprocess.STDOUT: 用作 stderr 参数值时,相当于把标准错误重定向到标准输入...True 时,stdin、stdout、stderr 会以“文本”模式打开(返回值对象 stdout、stderr 存储文本内容),否则返回值对象 stdout、stderr 存储是字节序列env..., shell=True) # 当 shellTrue 时,args 是一个字符串ret = subprocess.run("ls -l", shell=True, capture_output...("abcdefg", shell=True, text=True, # 注意:这里必须 shell=True 才能捕获到 /bin/sh 输出错误 # 当 shell=False 时...,这里是捕获不到subprocess.run()自己就会报错 ret = subprocess.run(" ".join(cmd), shell=True, stdout=subprocess.PIPE

    68620

    Python模块学习:subprocess模块详解

    这个模块目的在于替换几个旧模块和方法,如:os.systemos.spawn*1.subprocess模块常用函数函数 描述subprocess.run()Python 3.5新增函数。...说明:1.在Python 3.5之后版本,官方文档中提倡通过subprocess.run()函数替代其他函数来使用subproccess模块功能;2.在Python 3.5之前版本,我们可以通过...shell: 如果shellTrue,那么指定命令将通过shell执行。如果我们需要访问某些shell特性,如管道、文件名通配符、环境变量扩展功能,这将是非常有用。...'ls', '-l'], returncode=0)>>> subprocess.run("exit 1", shell=True, check=True)Traceback (most recent...,实际上就是实现shell管道共功能。

    55440

    用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数 .py 文件

    当你使用 os.system 函数时,它会在系统 shell 执行你提供命令,然后返回一个状态码,表示命令是否成功执行。这个状态码通常是一个整数,0 表示命令成功执行,非零值表示出现了错误。...因此,os.system 函数设计就是这样,它只返回命令执行状态,而返回命令输出。...= subprocess.run(['dir'], capture_output=True, text=True, shell=True) # 打印命令输出 print(result.stdout...我们还在 subprocess.run 函数添加了 shell=True 参数,这是因为在 Windows 系统,某些命令(比如 dir)需要在 Shell 执行。...参考链接: 在 Python 处理命令行参数详解(sys.argv 与 argparse 详解) Python 如何运行多个 py 文件 带参数 Python 四种运行其他程序方式

    9000

    记录Python 调用 subprocess.Popen 卡死解决办法

    项目中需要在 Python 代码执行一些系统指令,例如调用项目中某个可执行程序,所以就使用了 subprocess.Popen 方法。...shell=True:表示通过系统 shell 来执行命令,可以使用命令通配符、管道等功能。...executable="/bin/bash":指定要执行 shell 程序,这里是 /bin/bash。 stderr=subprocess.STDOUT:将子进程标准错误输出合并到标准输出。...原因就是:PIPE本身可容纳量比较小,所以程序会卡死,所以一大堆内容输出过来时候,会导致PIPE不足够处理这些内容 实际我业务需求并不关心程序执行过程输出,只要知道最后执行结果即可,使用上面的..., shell=True, executable="/bin/bash", check=True, cwd

    1.4K10

    Python实战-使用微信遥控你电脑

    控制路由器、智能家居等具有开放接口玩意儿 运行脚本时自动把日志发送到你微信 加群主为好友,自动拉进群 跨号或跨群转发消息 自动陪人聊天 逗人玩 注意如里发消息太频繁会被限制网页版微信登陆,所以还是不要玩太过分...("shutdown -s -t 0",shell=True,stdout=subprocess.PIPE) return process.stdout.decode("gbk"...= "": os.chdir(dir) process = subprocess.run("dir", shell=True,stdout...(command,shell=True,stdout=subprocess.PIPE) return process.stdout.decode("gbk") 代码还有一些其他功能函数...,防止消息被撤回,保存在日志文件 :param msg: :return: ''' logger.info(msg) 完整代码和一键运行文件,我已生成好,放在了百度网盘

    1.6K20

    解决libsubprocess.py, line 997, in _execute_child startupinfo) FileNotFoundError

    ('dir', shell=True)except FileNotFoundError as e: print(f"Error: {e}")在上述代码,我们使用​​subprocess.check_output...请注意,示例代码​​shell=True​​参数用于在Windows系统上执行命令。...shell=False, timeout=None, check=False, encoding=None, errors=None)​​:运行指定命令。...可以通过​​args​​参数传递命令和参数,​​shell​​参数用于指示是否要在shell执行命令,​​stdout​​和​​stderr​​参数可以用于指定输出和错误输出处理方式。​​...需要注意是,在使用​​subprocess​​模块执行命令时,需要小心防范安全风险,特别是在使用​​shell=True​​时,应该避免拼接用户输入命令参数,以免引发命令注入等安全问题。

    77920
    领券