2017-07-27 119 views
-2

我對python比較陌生,所以我想知道是否可以調用python從交互式python外部讀取字符串(或需要執行的代碼),類似於exec()在Python中的工作方式。 基本上,我想知道是否有任何方法讓Python從命令行或其他方式讀取代碼,而不是必須將該代碼保存在「file.py」或其他類似文件中。 我想避免運行這個:python file.py,因爲我希望避免需要文件名。 我四處尋找解決辦法,發現Execute python commands passed as strings in command line using python -cPython - How do I pass a string into subprocess.Popen (using the stdin argument)?。第一個答案似乎是我想要的,但是我缺乏如何將字符串傳遞到stdin的知識部門,所以如果有人能夠更好地解釋該方法(如果它是正確的答案),我將不勝感激。第二個鏈接是我在查找stdin時發現的,並且看起來很有希望,但是在執行後,我意識到,從我的理解中,我仍然需要某種子進程的文件名。 我打算使用它以便在Jupyter Notebook或任何類似的程序中使用,因此當我運行一個數據單元時,它可以在Python中執行或返回錯誤消息,但首先要做的是必須瞭解如何在不需要文件名的情況下引用我想要的語言。感謝您的時間和考慮!如何在不提供文件名的情況下執行python?

+0

您可以將代碼傳送到解釋器中。 –

+0

@克勞斯D.你能詳細說明一下嗎?我已經嘗試使用下列代碼管道:'def exec_py(code): proc = subprocess.Popen([「python」,'f'],stdin = subprocess.PIPE,stdout = STDOUT,stderr = subprocess.PIPE,shell =假) 值return_code = proc.wait() proc.stdin.write( '代碼') 出= proc.stdout.read() ERR = proc.stderr.read() 如果(ERR): 返回(err.decode(「utf-8」)) else: return(out.decode(「utf-8」))'通過在Jupyter中運行單個單元來給出代碼,但它又需要一個文件命名爲'f',我無法提供。 –

+0

只是...不提供文件名?運行'python'。 – user2357112

回答

0

它有點不清楚你想要用這個,但這裏是你好世界使用命令行選項(-c)而不用管道輸入它。這只是運行的字符串,就好像它是在python解釋器或腳本中。

python -c "print('hello world')" 

如果你真的想從標準,你可以使用這樣的運行代碼:

echo "for i in range(100):\n\tprint(i)" | python -c "import sys;print('hello world');exec(''.join([item for item in sys.stdin]))" 

有更多關於如何在手冊頁或python documentation使用命令行工具。使用

python -c "my_var = 'my name is john';print(my_var)" 

注意

1):

+0

我很感激幫助,但我一直在尋找可以提供多個字符串的答案。我發現在https://stackoverflow.com/questions/10768584/execute-python-commands-passed-as-strings-in-command-line-using-python-c中的方法,但作爲第一個反應聲明,它不能打印多於一個字符串。 'python -c「x ='hello',print(x)」'似乎不起作用。你知道如何傳遞python代碼到標準輸入,顯然這是答案,但我不熟悉 –

+0

這將無法正常工作,但python -c「x ='hello'; print(x)」does –

0

您可以使用以下你分開命令。 2)你需要使用「」和裏面輸入命令。

相關問題