我想做一個函數來確定它的調用方式。我知道如何通過檢查模塊來完成這項工作。例如,this question,運作良好,並提供了在可變lines
我的期望的輸出如下所示:如何從交互式shell中訪問調用源代碼
def hello(x):
frame,filename,line_number,function_name,lines,index=\
inspect.getouterframes(inspect.currentframe())[1]
print(frame,filename,line_number,function_name,lines,index)
的問題是,這種解決方案並沒有在交互式命令行會話工作。例如,在命令行,結果是這樣的:
>>> y = hello(7)
(<frame object at 0x01ECA9E8>, '<stdin>', 1, '<module>', None, None)
的問題是,源文件是'<stdin>'
,所以lines
變量是None
。如何在交互式會話期間訪問呼叫線路以查找包含字符串y = hello(7)
的結果?
您不能,因爲交互式會話不會跟蹤輸入的行。如果你願意要求'ipython',那麼可能有辦法在那裏做。或者你可以在交互式會話中編寫你自己的wrapper,它只是跟蹤讀入'stdin'中的行並將它們傳遞過去(這可能不正確,但可以通過反覆試驗找到正確的細節),那麼可以索引到那。 – abarnert