0
subprocess.Popen()
의 프로세스에 명령을 전달해야하지만, 수행 할 때 이후에 stdin.close()
을 사용하는 경우에만 작동합니다. 내 코드는 아래와 같습니다.subprocess.Popen() 프로세스에 명령 보내기
sprocess.stdin.write('/stop'.encode())
sprocess.stdin.flush()
sprocess.stdin.close()
sprocess.stdout.close()
작품을하지만, 그 때문에의 stdin.close()
내가이 파이프를 닫지 않고이 작업을 수행 할 수 있어야합니다.
파이프를 닫지 않고 프로세스에 명령을 전달하려면 어떻게해야합니까?
#!/usr/bin/python3
import discord
import asyncio
from subprocess import Popen, PIPE
client = discord.Client()
@client.event
async def on_ready():
print('Bot ID: '+ client.user.id +'\nREADY\n')
@client.event
async def on_message(message):
if message.content.startswith('/start'):
if message.channel.name == "server-console":
await client.send_message(message.channel, '**SERVER STARTING**')
print('SERVER STARTING')
global sprocess
global soutput
sprocess = Popen('java -Xmx2048M -Xms2048M -jar minecraft_server.jar',
shell=True,
stdout=PIPE,
stdin=PIPE)
elif message.content.startswith('/stop'):
if message.channel.name == "server-console":
print('SERVER STOPPING')
sprocess.stdin.write('/stop'.encode())
sprocess.stdin.flush()
sprocess.stdin.close()
sprocess.stdout.close()
elif message.content.startswith('/restart'):
if message.channel.name == "server-console":
print('SERVER RESTARTING')
elif message.content.startswith('/'):
if message.channel.name == "server-console":
sprocess.stdin.write(message.clean_content.encode())
sprocess.stdin.flush()
print(message.clean_content)
print('COMMAND SENT')
client.run('token')
'sprocess.stdin.write ('/ stop'.encode())'는 개행을 추가하지 않습니다! 당신의 하위 프로세스는 개행이나 EOF로 표시되는 * line * 입력을 기대하고있을 것입니다. 'stdin'을 닫으면 그 EOF를 보냅니다. 대신'sprocess.stdin.write ('/ stop \ n'.encode())'를 보내보십시오. – MisterMiyagi
@MisterMiyagi 그 대답을 받아 들일 수있게 해주시겠습니까? – spikespaz