我foo用 Python寫了一個(gè) RPC 服務(wù)器,我用它去妖魔化了start-stop-daemon --start --quiet --background \
--make-pidfile \
--pidfile /var/run/foo.pid \
-- /opt/foo一切正常,除了在我的守護(hù)進(jìn)程中每次使用subprocess.check_call(some_cmd)或os.popen(some_cmd).read(1048576)與我foo在前臺(tái)開始時(shí)的情況相比都返回一個(gè)空字符串。外部程序some_cmd仍然成功執(zhí)行(正如我在日志中看到的那樣),但我無法訪問它打印到標(biāo)準(zhǔn)輸出的內(nèi)容。為什么會(huì)這樣,我可以對(duì)start-stop-daemon調(diào)用或我的 Python 代碼進(jìn)行哪些更改以解決此問題?PS:我發(fā)現(xiàn)只有某些命令的輸出現(xiàn)在是空的:subprocess.check_output('echo "Hello World"', shell=True)仍然表現(xiàn)正常,而subprocess.check_output('/etc/init.d/apache2 --nocolor reload', shell=True)現(xiàn)在的輸出是空的。
2 回答

長風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
從問題的標(biāo)題來看,如果是嘗試進(jìn)行標(biāo)準(zhǔn)輸出訪問,則該進(jìn)程是否有終端是可能的。當(dāng)妖魔化時(shí),沒有終端。

肥皂起泡泡
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
我自己解決了。問題是在使用標(biāo)志運(yùn)行時(shí)start-stop-daemon
設(shè)置環(huán)境變量(手冊頁中沒有記錄......)。EINFO_QUIET
--quite
設(shè)置此變量后,OpenRC init 腳本不會(huì)向 stdout 打印任何內(nèi)容。一個(gè)簡單的
import os os.environ["EINFO_QUIET"] = "NO"
解決了這個(gè)問題。
添加回答
舉報(bào)
0/150
提交
取消