2014-11-16 60 views
0

我有一個程序從用戶處接收標準輸入並通過命令行運行。有沒有辦法讓程序忽略管道和重定向?限制管道和重定向(Python3)

例如:python program.py <input.txt> output.txt只想充當如果你把python program.py

回答

0

有沒有簡單的方法來找到用戶推出你在一般情況下,終端。有一些技巧可以使用,但它們不會總是有效。

您可以使用os.isatty()來檢測文件(例如sys.stdinsys.stdout)是否似乎是交互式終端會話。有可能你連接到一個終端會話而不是用戶用來啓動你的程序的終端會話,所以這不是萬無一失的。這樣的終端會議甚至可能在節目的控制下而不是人類的控制之下。

在Unix下,進程具有「控制終端」的概念。您可以通過os.ctermid()與此交談。但用戶可以在啓動流程之前操作此值。您也可能根本沒有控制終端,例如如果作爲守護進程運行。

您可以檢查父進程,看看它的任何文件描述符是否連接到終端會話。不幸的是,我不知道有任何跨平臺的方式來做到這一點。在Linux上,我會從os.getppid()/proc文件系統開始(請參閱proc(5))。如果父進程已退出(例如,用戶在bash下運行your_program.py & disown; exit),則這不起作用。但是在那種情況下,無論如何你都無法做到。