- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过 ssh 执行一个简单的任务:返回给定文件列表中不存在的所有文件。
我执行此操作的方法是将以下内容包装在 ssh session 中:
for f in $(files);执行 stat $f >/dev/null ;完成
标准输出重定向将忽略所有好的文件,然后读取标准错误将为我提供所有未找到文件的列表。
我首先想到在 subprocess.run(..., shell=True)
中使用此 bash 代码和 ssh 部分,但不鼓励这样做。相反,建议使用paramiko
。
我尝试理解为什么以及何时原生 python 比子处理 bash 更好
在我看来,原生 python 的缺点是需要涉及一些复杂的模块,例如 paramiko,而 bash 的 ssh 和 stat 在我看来更简单易用
对于何时以及如何选择 bash 而不是 python 有任何指导吗?
这个问题主要是关于通过 ssh 使用命令,但与 bash 以简短而简单的方式执行且 python 包装的任何其他命令相关
最佳答案
这里实际上有三种选择:进程内做一些事情(例如paramiko
),运行ssh
直接> (使用subprocess
),并使用shell(也使用subprocess
)运行ssh
。作为一般规则,避免以编程方式运行 shell(而不是根据交互式用户请求)。
原因是它是一个以人为本的界面(因此可以轻松地用空格分隔单词以及 $HOME
和通配符的快捷方式),但作为API。例如,考虑一下您的代码如何检测 ssh
丢失:paramiko
就不会出现这种情况(只要 it 是安装),对于 subprocess
来说是显而易见的,并且只是来自 shell 的(不明确的)退出代码和 stderr 消息。还要考虑如何提供要运行的命令:它必须是适合 shell 的命令(由于 SSH 协议(protocol)的限制),但如果您调用 ssh
with shell 必须对其进行编码(有时称为“双重转义”),以便本地 shell 的解释成为远程 shell 所需的多字命令。
到目前为止,paramiko
和 subprocess
几乎是等效的。作为一种更困难的情况,请考虑 key 验证失败如何表现:paramiko
会将失败描述为数据,而其他人会尝试将失败描述为数据。与用户交互(可能存在也可能不存在)。 paramiko
还支持通过一个经过身份验证的连接打开多个 channel ; ssh
也可以这样做,但只能通过涉及 Unix 套接字文件的复杂 ControlMaster
配置(在某些部署中可能没有任何合适的位置存在)。说到配置,如果用户的 .ssh/config
的设计没有考虑到此自动化用例,您可能需要传递 -F
以避免用户的 .ssh/config
的复杂化。
总而言之,库是为像您这样的用例而设计的,因此它们比通过面向人类的命令组装您自己的界面更好地工作也就不足为奇了,特别是对于边缘情况(尽管这样的手动合成是非常有用的可能!)。如果安装像 paramiko 这样的非标准依赖项是一种负担,至少直接使用 subprocess ;去掉第二个外壳已经是很大的进步了。
关于python - 文件相关操作 python 子进程 vs 原生 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58426347/
需要帮助将这些给定的数字打印成星号,但我是编程新手;我该怎么做? #include int main(void) { int a[5]={20,1,5,15,12}; int i=0
使用 Delphi XE 2 我试图确定缩放方向以将缩放效果应用于图像(TImage),但没有找到执行此操作的函数,并且图像的 OnGesture 事件中的 EventInfo 属性没有此信息. 我见
我不知道制服在内存中是如何表示的。 制服似乎会占用宝贵的寄存器空间,但它们最终会传入/通过/传出到全局内存中,对吗? 制服不用时情况会发生变化吗?编译器可以将它们优化掉吗?--在这种情况下,我已经将无
我正在尝试在名为“timeclock”的模型上记录“time_in”和“time_out”记录。这是我想做但无法开始工作的事情! 检查最后一个时钟条目,看看它是否同时填充了“time_in”和“tim
我想听听您如何解决这种编程任务!?每种类型(OPER = 1 类型)对应一种特定的信息。 这只是大约 10 个具有相同结构的规范之一。首选创建这些“转换器”(协议(protocol))的通用方法。 最
我正在使用 Rest API(NodeJS、Express)和 PostgreSQL 制作 React-Native 应用。 在我的本地机器上托管时一切正常。当 API 托管在我的机器上并且 Post
我是一名优秀的程序员,十分优秀!