簡體   English   中英

從Python文件輸入可執行文件

[英]Input on executable file from Python file

我的問題是:我正在嘗試為程序使用Python接口(已經使用FORTRAN制作),以便用戶可以通過打開程序並發送輸入來引入輸入,但是由於某種原因它永遠無法工作。

我導入以下內容:

import simpleguitk,os
from subprocess import Popen,PIPE,STDOUT

使用在這里已經發現的不同答案,我寫了以下內容:

p = Popen(['potscat2.exe'],stdin=PIPE)#,stdout=PIPE,stderr=STDOUT)
p.communicate(str(opmenu[0])+"\n"+str(opmenu[1])+"\n"+str(opmenu[2])+"\n"+str(opmenu[3][0]*pow(10,opmenu[3][1]))+"\n","UTF-8")

另外,還有以下內容:

p = Popen(['potscat2.exe'],stdin=PIPE)#,stdout=PIPE,stderr=STDOUT)
p.stdin.write(str(opmenu[0]))
p.stdin.write(str(opmenu[1]))
p.stdin.write(str(opmenu[2]))
p.stdin.write(str(opmenu[3][0]*pow(10,opmenu[3][1])))

但是,這兩種選擇均無效。

前者給出此錯誤:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:\Python34\lib\site-packages\simpleguitk\input.py", line 90, in _mouse_click
self._mouse_click_handler(pos)
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 357, in mouse_control
    b.mouse_act(position)
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 106, in mouse_act
    self.action()
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 112, in <lambda>
    butF = Button((1050,800),(120,50),"Finish", lambda : finish())
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 280, in finish
    p.communicate(str(opmenu[0])+"\n"+str(opmenu[1])+"\n"+str(opmenu[2])+"\n"+str(opmenu[3][0]*pow(10,opmenu[3][1]))+"\n","UTF-8")
  File "C:\Python34\lib\subprocess.py", line 954, in communicate
    endtime = _time() + timeout
TypeError: unsupported operand type(s) for +: 'float' and 'str'

后者給出此錯誤:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
    return self.func(*args)
  File "C:\Python34\lib\site-packages\simpleguitk\input.py", line 90, in _mouse_click
    self._mouse_click_handler(pos)
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 357, in mouse_control
    b.mouse_act(position)
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 106, in mouse_act
    self.action()
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 112, in <lambda>
    butF = Button((1050,800),(120,50),"Finish", lambda : finish())
  File "C:\Users\Miguel\PythonWorkplace\PotScat\PotScat2.py", line 281, in finish
    p.stdin.write(str(opmenu[0]))
TypeError: 'str' does not support the buffer interface

有人可以幫我嗎? 大家知道,我在Windows 7上使用Python 3.4 。可執行文件必須一個接一個地接收數據,但是它們彼此獨立。

救命?

編輯:從第一種選擇中獲取“ UTF-8”取出我提到的TypeError(將其計為超時),但作為交換,它給出了與另一種可能性相同的TypeError。

opmenu定義為

opmenu = [0,0,0,[0,0]]

所有值都是整數,除了opmenu [3] [0] ,這是一個float

p.communicate(str(opmenu[0])+"\n"+str(opmenu[1])+"\n"+str(opmenu[2])+"\n"+str(opmenu[3][0]*pow(10,opmenu[3][1]))+"\n","UTF-8")

到第二個參數communicatetimeout 您給它“ UTF-8”,但這不是有效值。 timeout應為數字或None

嘗試僅用一個參數調用communicate

p.communicate(str(opmenu[0])+"\n"+str(opmenu[1])+"\n"+str(opmenu[2])+"\n"+str(opmenu[3][0]*pow(10,opmenu[3][1]))+"\n")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM