python bash命令:如何转义单引号?

2023-12-06

我正在尝试通过 python 执行 shell 命令。该命令类似于以下命令:

su -c "lftp -c 'open -u user,password ftp://127.0.0.1; get ivan\'s\ filename.pdf' " someuser

所以,当我尝试用 python 来做这件事时:

command = "su -c \"lftp -c 'open -u user,password ftp://127.0.0.1; get ivan\'s\ filename.pdf' \" someuser"
os.system(command)

Or:

command = subprocess.Popen(["su", "-c", "lftp -c 'open -u user,password ftp://127.0.0.1; get ivan\'s\ filename.pdf'", "someuser"])

我收到以下错误:

bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file

参考:ivan 的单引号。

我知道其中有很多单/双引号,但我怎样才能避免这个呢?

提前致谢!

编辑:这对我有用:

subprocess.call(["su","-c",r"""lftp -c "open -u user,password ftp://127.0.0.1; get ivan\'s\ filename.pdf" """, "someuser"])

非常感谢大家!


如果您打印了测试字符串,您会注意到它会产生以下结果:

su -c "lftp -c 'open -u user,password ftp://127.0.0.1; get ivan's\ filename.pdf' " someuser

问题是你需要转义用于转义单引号的斜杠,以防止 Python 吃掉它。

command = "su -c \"lftp -c 'open -u user,password ftp://127.0.0.1; get ivan\\'s\\ filename.pdf' \" someuser"

会得到反斜杠,然后你会从lftp得到一个错误......

这有效:

command = "su -c \"lftp -c \\\"open -u user,password ftp://127.0.0.1; get ivan\\'s\\ filename.pdf\\\" \" someuser"

(它使用(转义的)双引号来代替,以确保由 su 启动的 shell 仍然解释转义序列)

(os.system(a)有效地做到了subprocess.call(["sh","-c",a]), 意思就是sh sees su -c "lftp -c 'open -u user,password ftp://127.0.0.1; get ivan's\ filename.pdf' " someuser(对于原来的)。它对此进行转义序列处理,并看到一个未闭合的单引号(它最初由ivan'),导致你的错误)。一旦这个问题解决了,sh调用 su,它又启动另一个实例sh进行更多的转义处理,导致来自lftp的错误(因为sh不处理单引号中的转义序列)

subprocess.call() or curl是更好的方法来实现这一点 -curl需要更少的转义,你可以使用curl "ftp://user:[email protected]/ivan's filename.pdf" on the command line, some more escaping is needed for going viasu -cand for python.sudoinstead ofsu` 也导致需要更少的转义......

如果你想使用subprocess.call()(去除一层外壳),你可以使用

subprocess.call(["su","-c","lftp -c \\\"open -u user,password ftp://127.0.0.1; get ivan\\'s\\ filename.pdf\\\"", "someuser"])

(问题是 python 处理一级转义,并且sh -c调用自su与下一层...这会导致一个相当丑陋的命令...)(不同的引号可能会稍微减少...)

Using r""可以摆脱python级别的转义处理:(只需要shell级别的转义)(使用三引号允许在字符串中使用引号)

subprocess.call(["su","-c",r"""lftp -c \"open -u user,password ftp://127.0.0.1; get ivan\'s\ filename.pdf\"""", "someuser"])

添加空格可以去除 shell 转义符,因为lftp似乎不需要对空格和单引号进行转义的文件名。

subprocess.call(["su","-c",r"""lftp -c "open -u user,password ftp://127.0.0.1; get ivan's filename.pdf" """, "someuser"])

这导致最终的结果是lftpARGV 正在

["lftp","-c","open -u user,password ftp://127.0.0.1; get ivan's filename.pdf"]

对于卷曲(由于su参与):

subprocess.call(["su","-c",r"""curl "ftp://user:[email protected]/ivan's filename.pdf" """, "someuser"])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python bash命令:如何转义单引号? 的相关文章

随机推荐

  • 在 for 循环内等待承诺

    let currentProduct for let i 0 i lt products length i currentProduct products i subscription getAll products i id then s
  • PHP 对象类变量

    我在 PHP 中构建了一个类 并且必须将类变量声明为对象 每次我想声明一个空对象时 我都会使用 var new stdClass 但是如果我用它来声明一个类变量为 class foo var bar new stdClass 发生解析错误
  • Node 和 Chrome (V8) 中块作用域内的 const

    我正在编写一个nodejs v4 2 4 应用程序 我遇到了一些奇怪的行为 function A number this number number for var i 0 i lt 3 i const a new A i console
  • Maven 尝试部署到本地主机而不是远程服务器

    这是我的pom xml构建配置
  • React Router Dom v6 - 活动导航上的悬停样式

    我有一个具有悬停状态和活动导航样式的导航栏 我正在尝试让我的活动导航链接也具有自定义悬停状态 现在 活动样式正在覆盖悬停状态 如何在活动导航链接上保持悬停状态样式 发生了什么 active nav styles looks good whe
  • 在powershell中重命名文件

    我想请求帮助重命名给定文件夹中的文件 我想将字符 vol 更改为 vol 感谢帮助 gci c folder path name match vol rename item newname name replace vol vol what
  • 如何使用 python 进行 tar 备份

    我有目录 home user1 user2 我想循环遍历所有用户名主目录 然后制作 tar gz 文件 然后将其存储在 backups 目录中 我是 python 新手 很困惑如何开始 这应该有效 import os import tarf
  • Tomcat:通过 JNDI 使用 FTP 连接 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我需要从在 Tomcat 6 上运行的 Web 应用程序访问 FTP 服务器 我想使用 JNDI 来执行此操作 如何使用 JNDI 在 Tomcat 中配置此 FTP 连接 我必须写
  • R中响应面的scatterplot3d

    我想通过 scatterplot3d 绘制响应面图 但以下代码出现错误 library rsm swiss2 lm lt lm Fertility poly Agriculture Education degree 2 data swiss
  • 让文本显示在子图图像前面

    Ive got a lot of images of galaxies through different filters each line of subplots represents a new object with a uniqu
  • JQuery keyup 在 IE 10 上不起作用

    此代码在 Chrome 和 Firefox 上完美运行 它只会在 IE 10 上出现问题 我使用的是 JQuery 1 11 1 在控制台中 如果您使用两个按键 则似乎不会触发按键操作 因此 如果我按住 alt a 当我释放它们时 它只会触
  • 无需连接设备即可扫描设备的 Ble Scan 服务

    我想用 BLE 扫描一些设备 我只想展示我的设备 因此我会获取设备的名称 如果它是好的 我会将其放入我的列表中 if device getName contains DEVICE NAME mDevices put device hashC
  • Objective-C:捕获自定义框架内所有视图的屏幕截图

    我有一个游戏 用户可以创建自定义级别并将它们上传到我的服务器以供其他用户玩 我想在用户测试他 她的级别以上传到我的服务器之前获取 操作区域 的屏幕截图 预览图像 我知道如何获取整个视图的屏幕截图 但我想将其定义为自定义框架 考虑下图 我只想
  • 需要一个文档来使用 onenote Interop 从图像中提取文本?

    我需要做一个简单的程序 需要使用 Onenote Interop 从图像中提取文本 有人可以建议我一份适合我的概念的文件吗 OneNote 的 OCR 识别的文本存储在 OneNote 中 XML 文件结构的 one OCRText 元素中
  • 如何阻止 Excel 破坏 VBA 脚本插入的公式 [重复]

    这个问题在这里已经有答案了 我在 Excel 工作簿中有一个 VBA 脚本 用于收集特定文件夹中所有工作簿的结果 Private Sub Workbook Open Dim path As String Dim fso As Object
  • Visibility="Collapsed" 对网格中的 GroupBox 没有影响

    我有一个带有网格和不同组框的视图 将第一行中所有组框的可见性设置为Collapsed应该让它们消失 有效 并为下面的组框腾出 空间 他们应该向上移动 这是行不通的
  • 将 Pyinstaller 与 NLTK 一起使用会导致错误:找不到 nltk_data

    我正在尝试导出一个使用 NLTK 作为 Python 3 6 和 Windows 10 的 exe 的简单 GUI 当我运行 PyInstaller 将我的简单程序冻结为 exe 时 出现错误 添加二进制文件和数据文件时找不到 c user
  • 适用于 Mac 的 VBA 宏或 Office 插件

    目前我们为word开发了一个VB宏 当我们尝试在 Mac 上使用它时 它失败并显示消息 Mac 不支持 VB 宏 有没有办法在 mac 上使用 C Office 插件 我的要求是有一个简单的实用程序来将注释 从用户读取 添加到当前Word文
  • 如何使用 BigQuery 计算 DAU/MAU(参与度)

    DAU 和 MAU 每日活跃用户和每月活跃用户 是衡量用户参与度的既定方法 如何使用 SQL 和 Google BigQuery 获取这些数字 2019年标准SQL更新 https stackoverflow com a 49866033
  • python bash命令:如何转义单引号?

    我正在尝试通过 python 执行 shell 命令 该命令类似于以下命令 su c lftp c open u user password ftp 127 0 0 1 get ivan s filename pdf someuser 所以