作者asd24693120 (曙光)
看板Linux
标题[问题] ubuntu >导向不能用在subprocess
时间Mon May 24 19:03:29 2021
各位前辈您好,由於不知道要放在linux还是python版,若有错版我会马上删文
当我在terminal执行sudo ./sync_to_gps8 >123.txt时,都能够顺利执行,但因为我需要
用python去统整,所以我使用了python的subprocess 模组,但是当我一样执行sudo ./sy
nc_to_gps8 >123.txt,却遇到了这个问题,但我也不知道这是错在哪里,希望各位前辈
指导,谢谢各位前辈
正常在terminal执行:
https://i.imgur.com/m3CBuSH.jpg
用subprocess模组执行(发生错误):
https://i.imgur.com/y9fmwq9.jpg
程式码:
https://i.imgur.com/dmIp5Dk.jpg
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.75.220.152 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1621854211.A.0F7.html
※ 编辑: asd24693120 (42.75.220.152 台湾), 05/24/2021 19:14:06
1F:推 goldie: cwd 是否不在哪?找不到 python script 档?05/24 19:48
2F:→ goldie: 改执行 sudo pwd 印出路径来看看?05/24 19:48
https://i.imgur.com/eaJkilv.jpg
3F:→ goldie: 还有,文不对题05/24 19:48
想请问g大,我路径印出来了,另外想请问我的标题有哪里下的不对吗?我立刻改,谢谢
您指导
4F:→ oToToT: 文有不对题吗OAO?05/24 20:15
5F:→ oToToT: 你跟你上面一样多加个 shell=True 就会动了吧05/24 20:19
真的,这样就可以了,想请问o大为什麽这样就可以了呢?
※ 编辑: asd24693120 (111.254.58.80 台湾), 05/24/2021 20:27:58
6F:→ oToToT: 我没理解错的话,你不加 shell=True 的话它会去找档案名称05/24 21:52
7F:→ oToToT: 为 'sudo ./sync_ ...' 的程式来执行05/24 21:52
8F:→ oToToT: 加了会真的 invoke 一个 shell 出来跑你给他的指令05/24 21:53
原来如此,谢谢o大
9F:推 goldie: 推楼上 oToToT 大看出问题症结点,高手!05/24 21:58
10F:→ goldie: 这个问题比较像是同个命令能在一般 shell 执行,05/24 21:58
11F:→ goldie: 但是却无法执行於 Python 的 subprocess,05/24 21:58
12F:→ goldie: 另外,错误讯息 No such file or directory 跟…05/24 21:58
13F:→ goldie: ">" 重导向没有关系,所以我才会觉得文不对题05/24 21:58
谢谢g大的建议,因为我也不太晓得要怎麽问才能完美表示出问题,经您这样说,我大概
知道您的意思了
14F:→ kenduest: 其实官方说很清楚,预设 shell=False 时候,你带入的05/24 22:13
15F:→ kenduest: 那个字串会当作要执行时间的程式档案名称05/24 22:14
16F:→ kenduest: 你有用 shell 内 io 重导的符号时候,需要用 shell=True05/24 22:15
请问io重导是什麽意思呢?
17F:→ kenduest: 毕竟这些符号只有 shell 可以认识,所以会开启外部的05/24 22:15
18F:→ kenduest: shell 程式,把整个字串当命令丢给 shell 执行 05/24 22:16
19F:→ kenduest: shell=True 基本上就等於传统 os.system() 使用05/24 22:17
20F:→ kenduest: 若你不使用 shell=True 要使用 subprocess.call()05/24 22:19
21F:→ kenduest: 一般就是得改成带入 ['sudo', './sysnc_to_gps8']05/24 22:20
22F:→ kenduest: 至於 > 123.txt, 可以用 open() 开档带入给 stdout 参数05/24 22:24
谢谢k大仔细的讲解,让我真的又学到了一课
23F:推 oToToT: 推楼上讲得更清楚05/24 22:38
24F:推 Typebrook: 推,楼上解释道得很清楚 05/25 08:27
真的很谢谢各位前辈耐心的指导~
※ 编辑: asd24693120 (111.254.58.80 台湾), 05/25/2021 08:55:14
25F:推 goldie: ok理解,那不改标题也没差多少了 05/25 12:20
26F:推 goldie: io重导向指的是 shell 的 IO Redirection 05/25 12:31
27F:→ goldie: 就是 >、<、2>&1、…、这类的东西 05/25 12:32
28F:→ goldie: 由 shell 帮你重导 stdin/stdout/stderr 到其他 fd 或档 05/25 12:33
29F:→ goldie: 案 05/25 12:33
原来如此,谢谢g大指导
31F:推 Bencrie: 其实就 exec sudo vs exec sh -c sudo 的差别05/25 13:33
呜呜,b大说的这个我也不是很懂
※ 编辑: asd24693120 (42.74.31.161 台湾), 05/26/2021 14:01:16