Linux(CentOS)를 실행하는 EC2 인스턴스(AWS)에서 Minecraft 서버를 실행하고 있습니다. minecraft.service
시스템 프로세스를 다음으로 변경했습니다 .
ExecStart=python3 run_server.py
이 Python 스크립트는 run.json
서버 jar 이름, 웹훅 URL, 역할 ID 및 jvm 매개변수로 채워진 파일을 추출합니다. 다음과 같습니다.
{
"server_jar":"server.jar",
"jvm_args":"-Xms1G -Xmx4G",
"webhook_url":"your_url_here",
"role_id":"your_role_here"
}
sudo systemctl start minecraft
이후에 실행 하면 sudo systemctl status minecraft
다음 오류가 발생합니다.
with Popen(*popenargs, **kwargs) as p:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/local/lib/python3.12/subprocess.py", line 1953, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'java -Xmx3G -Xms3G -jar server.jar nogui'
답변1
더 많은 Python 코드를 보는 데 도움이 되지만 공백이 포함된 큰 문자열을 단일 명령 이름으로 실행하려고 하기 때문에 이 오류가 발생하는 것 같습니다. 대신 목록을 전달해야 합니다.
실수:
from subprocess import Popen, PIPE
process = Popen('java -Xmx3G -Xms3G -jar server.jar nogui', stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
옳은:
from subprocess import Popen, PIPE
process = Popen(
['java', '-Xmx3G', '-Xms3G', '-jar', 'server.jar', 'nogui'],
stdout=PIPE, stderr=PIPE
)
stdout, stderr = process.communicate()
긴 문자열을 여러 하위 부분으로 분할하고 이를 목록으로 전달하는 방법을 확인하세요.
이 답변이 더 도움이 될 수 있습니다.https://stackoverflow.com/questions/12605498/how-to-use-subprocess-popen-python