我想使用 python 向 julia 发送命令,然后获取字符串输出作为返回,然后再次发送命令。即 x=2,然后 x+1 返回 3。这需要通过
我想使用 python 向 julia 发送命令,然后获取字符串输出作为返回,然后再次发送命令。即 x=2
然后 x+1
返回 3
。这需要通过子进程进行交互式会话。我尝试了 subprocess.Popen(["julia", "-e"]
非交互式会话,并检查了 Julia 界面是否正常工作。但是,当我尝试使用以下代码运行 Julia 交互式会话时,它卡住了。
import subprocess
class PersistentJulia:
def __init__(self):
# Start Julia in interactive mode
self.process = subprocess.Popen(
["julia", "-i"], # Interactive mode
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True, # Text mode for easier string handling
bufsize=1, # Line-buffered
)
def run_command(self, command):
# Send the command to Julia and read the output
self.process.stdin.write(command + "\n")
self.process.stdin.flush()
# Read the output
output = []
while True:
line = self.process.stdout.readline()
if not line or line.startswith("julia>"):
break
output.append(line)
# Return the collected output as a single string
return ''.join(output).strip()
def close(self):
# Close the Julia process
self.process.stdin.write("exit()\n")
self.process.stdin.flush()
self.process.stdin.close()
self.process.stdout.close()
self.process.stderr.close()
self.process.terminate()
self.process.wait()
# Example usage
if __name__ == "__main__":
julia = PersistentJulia()
# Run some Julia commands
output1 = julia.run_command('x = 2')
print("Output 1:", output1)
output2 = julia.run_command('x + 3')
print("Output 2:", output2)
output3 = julia.run_command('println("The value of x is ", x)')
print("Output 3:", output3)
# Close the Julia process
julia.close()
可以 julia = PersistentJulia()
成功运行,但首先要
# Run some Julia commands
output1 = julia.run_command('x = 2')
print("Output 1:", output1)
代码卡住了,无法工作。看上去没问题,但我不确定是哪个部分出了问题。
我不确定子进程是否是正确的方法,而且我不想使用 Python 中的 Julia 库。如何在不使用 Python 的 Julia 库的情况下在 Python 中运行交互式 Julia 会话?