推 flu: 有點小叉題但想請教一下 在幾種呼叫其他程式的方法中 02/21 03:09
→ flu: 也就是 system(), exec(), qr//, IPC:: 之類等等, 02/21 03:10
→ flu: 原po是比較過python和perl的ipc, fork, 有無shell中介..等等 02/21 03:10
→ flu: 機制後 採用了python中和perl的system()的對等指令後 02/21 03:13
→ flu: 才說是「相同的邏輯,用 Python 跑卻沒事情」這樣的敘述是嗎 02/21 03:13
→ flu: 回到原題,試試 system LIST 或 exec跑看看囉 02/21 03:13
→ flu: 另外return value,$OS_ERROR(with use ENGLISH)的也都看看 02/21 03:14
→ flu: 會比較好吧 02/21 03:14
→ flu: *第二列推文的 qr// 要改成 qx// 02/21 03:20
---
Python 部分我目前只有試過 subprocess.call
至於 Perl or Python 內部如何運作,這我就不太了解 QQ
然後我試了一下您的建議
<a> system return value = 0, no error in $!
<b> 用 fork + exec 取代 system call, 也會發生 adb 咬檔事件
<c> 用 qx// 取代 system call, sub process 會卡住
關於這點,我發現跟 file open/close 一點關係也沒有
而是只要執行以下命令:
-----------------------------
system("adb kill-server");
`adb shell ls`; ____(*)
-----------------------------
那當 perl 跑到 (*) 那行時會莫名卡著...
ps:
不想要 (*) 卡著,只要在前面用 system call
隨便呼叫 adb cmd 即可
快分不清是 Perl/adb 有 bug, 還是我哪邊沒搞清楚
※ 編輯: doom8199 (61.221.50.98), 02/21/2015 23:18:06
推 flu: 黃色的那一列是想表達 system('adb shell ls') 執行後會停在 02/22 00:47
→ flu: 那一列,不會進行到下一列是嗎? 02/22 00:48
推 flu: 對了 我想你17~27列的程式會那樣是因為檔案$test不在,所以Q_Q 02/22 00:55
→ flu: 但是那文章描述的問題我認知上似乎與你的只是類似 但不同 02/22 01:00
→ flu: 另外我猜你的OS是win系列 這樣就與un*x的fork有大大的不同 02/22 01:03
→ flu: 只是順道一提 和要解決你的case應該沒有很大的關聯吧... 02/22 01:05
→ doom8199: 不是檔案不存在, 是 "$test file 真的被 adb.exe 使用" 02/22 18:44
→ doom8199: 才造成砍檔失敗。想要砍檔成功,只能先 kill-server 02/22 18:46
→ doom8199: 另外我目前遇到的問題的確是在 win series 02/22 18:48
→ doom8199: 晚一點會在 linux 上用 emulator 試看看有沒有同樣問題 02/22 18:50