java - Launching Minecraft via Python subprocess doesn't work -


today i've tried start minecraft client via command line on windows 7. works! code:

java -xmx1024m -djava.library.path="%appdata%\.minecraft\versions\1.7.10\1.7.10-natives" -cp "%appdata%\.minecraft\libraries\org\apache\logging\log4j\log4j-api\2.0-beta9\log4j-api-2.0-beta9.jar;%appdata%\.minecraft\libraries\org\apache\logging\log4j\log4j-core\2.0-beta9\log4j-core-2.0-beta9.jar;%appdata%\.minecraft\libraries\com\ibm\icu\icu4j-core-mojang\51.2\icu4j-core-mojang-51.2.jar;%appdata%\.minecraft\libraries\com\mojang\authlib\1.3\authlib-1.3.jar;%appdata%\.minecraft\libraries\io\netty\netty-all\4.0.10.final\netty-all-4.0.10.final.jar;%appdata%\.minecraft\libraries\java3d\vecmath\1.3.1\vecmath-1.3.1.jar;%appdata%\.minecraft\libraries\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;%appdata%\.minecraft\libraries\net\sf\jopt-simple\jopt-simple\4.5\jopt-simple-4.5.jar;%appdata%\.minecraft\libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar;%appdata%\.minecraft\libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar;%appdata%\.minecraft\libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar;%appdata%\.minecraft\libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar;%appdata%\.minecraft\libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar;%appdata%\.minecraft\libraries\com\google\guava\guava\15.0\guava-15.0.jar;%appdata%\.minecraft\libraries\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;%appdata%\.minecraft\libraries\commons-io\commons-io\2.4\commons-io-2.4.jar;%appdata%\.minecraft\libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar;%appdata%\.minecraft\libraries\net\java\jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.jar;%appdata%\.minecraft\libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar;%appdata%\.minecraft\libraries\com\google\code\gson\gson\2.2.4\gson-2.2.4.jar;%appdata%\.minecraft\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar;%appdata%\.minecraft\libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.0\lwjgl_util-2.9.0.jar;%appdata%\.minecraft\versions\1.7.10\1.7.10.jar" net.minecraft.client.main.main --username [username] --version 1.7.10 --gamedir c:\users\jon\appdata\roaming\.minec~1 --assetsdir c:\users\jon\appdata\roaming\.minec~1\assets --accesstoken [accesstoken] --uuid [uuid] --userproperties {} --usertype mojang 

a littlebit long, works fine if set username, uuid , accesstoken.

now want create little minecraft launcher python (little gui , on), , know can call command subprocess , popen.

so i've tried popen:

import subprocess  # sc = start command sc = ['java', '-xmx1024m', '-djava.library.path="%appdata%\\.minecraft\\versions\\1.7.10\\1.7.10-natives"', '-cp', '"%appdata%\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.0-beta9\\log4j-api-2.0-beta9.jar;%appdata%\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.0-beta9\\log4j-core-2.0-beta9.jar;%appdata%\\.minecraft\\libraries\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar;%appdata%\\.minecraft\\libraries\\com\\mojang\\authlib\\1.3\\authlib-1.3.jar;%appdata%\\.minecraft\\libraries\\io\\netty\\netty-all\\4.0.10.final\\netty-all-4.0.10.final.jar;%appdata%\\.minecraft\\libraries\\java3d\\vecmath\\1.3.1\\vecmath-1.3.1.jar;%appdata%\\.minecraft\\libraries\\net\\sf\\trove4j\\trove4j\\3.0.3\\trove4j-3.0.3.jar;%appdata%\\.minecraft\\libraries\\net\\sf\\jopt-simple\\jopt-simple\\4.5\\jopt-simple-4.5.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar;%appdata%\\.minecraft\\libraries\\com\\google\\guava\\guava\\15.0\\guava-15.0.jar;%appdata%\\.minecraft\\libraries\\org\\apache\\commons\\commons-lang3\\3.1\\commons-lang3-3.1.jar;%appdata%\\.minecraft\\libraries\\commons-io\\commons-io\\2.4\\commons-io-2.4.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jinput\\jinput-platform\\2.0.5\\jinput-platform-2.0.5-natives-windows.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar;%appdata%\\.minecraft\\libraries\\com\\google\\code\\gson\\gson\\2.2.4\\gson-2.2.4.jar;%appdata%\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.0\\lwjgl-2.9.0.jar;%appdata%\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.0\\lwjgl_util-2.9.0.jar;%appdata%\\.minecraft\\versions\\1.7.10\\1.7.10.jar"', 'net.minecraft.client.main.main', '--username', '[username]', '--version', '1.7.10', '--gamedir', 'c:\\users\\jon\\appdata\\roaming\\.minecraft', '--assetsdir c:\\users\\jon\\appdata\\roaming\\.minecraft\\assets', '--accesstoken', '[accesstoken]', '--uuid', '[uuid]', '--userproperties', '{}', '--usertype', 'mojang'] p = subprocess.popen(sc, stdout = subprocess.pipe, stderr = subprocess.pipe) while true: o = p.stdout.readline() e = p.stderr.readline() if o:     print o if e:     print e if o or e:     pass else:     break 

it doesn't work because error occures:

exception in thread "main" java.lang.noclassdeffounderror: org/apache/logging/log4j/logmanager      @ bao.<clinit>(sourcefile:84)      @ net.minecraft.client.main.main.main(sourcefile:72)  caused by: java.lang.classnotfoundexception: org.apache.logging.log4j.logmanager       @ java.net.urlclassloader$1.run(unknown source)      @ java.net.urlclassloader$1.run(unknown source)      @ java.security.accesscontroller.doprivileged(native method)      @ java.net.urlclassloader.findclass(unknown source)      @ java.lang.classloader.loadclass(unknown source)      @ sun.misc.launcher$appclassloader.loadclass(unknown source)      @ java.lang.classloader.loadclass(unknown source)      ... 2 more 

in normal command line command works fine without problems, in python there problem. ok, after bit of thinking realise can "pipe" cmd.exe , java command + arguments.

so i've tried it, too:

import subprocess  ### can see, i've tried replace %appdata%-placeholder  # start command sc = ['java', '-xmx1024m', '-djava.library.path="%appdata%\\.minecraft\\versions\\1.7.10\\1.7.10-natives"', '-cp', '"%appdata%\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.0-beta9\\log4j-api-2.0-beta9.jar;%appdata%\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.0-beta9\\log4j-core-2.0-beta9.jar;%appdata%\\.minecraft\\libraries\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar;%appdata%\\.minecraft\\libraries\\com\\mojang\\authlib\\1.3\\authlib-1.3.jar;%appdata%\\.minecraft\\libraries\\io\\netty\\netty-all\\4.0.10.final\\netty-all-4.0.10.final.jar;%appdata%\\.minecraft\\libraries\\java3d\\vecmath\\1.3.1\\vecmath-1.3.1.jar;%appdata%\\.minecraft\\libraries\\net\\sf\\trove4j\\trove4j\\3.0.3\\trove4j-3.0.3.jar;%appdata%\\.minecraft\\libraries\\net\\sf\\jopt-simple\\jopt-simple\\4.5\\jopt-simple-4.5.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar;%appdata%\\.minecraft\\libraries\\com\\google\\guava\\guava\\15.0\\guava-15.0.jar;%appdata%\\.minecraft\\libraries\\org\\apache\\commons\\commons-lang3\\3.1\\commons-lang3-3.1.jar;%appdata%\\.minecraft\\libraries\\commons-io\\commons-io\\2.4\\commons-io-2.4.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jinput\\jinput-platform\\2.0.5\\jinput-platform-2.0.5-natives-windows.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar;%appdata%\\.minecraft\\libraries\\com\\google\\code\\gson\\gson\\2.2.4\\gson-2.2.4.jar;%appdata%\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.0\\lwjgl-2.9.0.jar;%appdata%\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.0\\lwjgl_util-2.9.0.jar;%appdata%\\.minecraft\\versions\\1.7.10\\1.7.10.jar"', 'net.minecraft.client.main.main', '--username', 'microskype', '--version', '1.7.10', '--gamedir', 'c:\\users\\jon\\appdata\\roaming\\.minecraft', '--assetsdir c:\\users\\jon\\appdata\\roaming\\.minecraft\\assets', '--accesstoken', '40b9d172b3fe4e3486e33a67ca3db075', '--uuid', 'e457b026-2e68-40b6-b38d-fcb3645ba318', '--userproperties', '{}', '--usertype', 'mojang'] # new start command starting cmd.exe , /c pipe cmd.exe , java command + parameters nsc = ["cmd.exe", "/c"]  1 in sc:     1 = one.replace('%appdata%', 'c:\\users\\jon\\appdata\\roaming')     1 = one.replace('%appdata%', 'c:\\users\\jon\\appdata\\roaming')     nsc.append(one)  p = subprocess.popen(nsc, stdout=subprocess.pipe, stderr=subprocess.pipe) while true:     o = p.stdout.readline()     e = p.stderr.readline()     if o:         print o     if e:         print e     if o or e:         pass     else:         break 

then i've tried use whole java path instead of java, windowserror: [error 5] access denied. command long? :d

i think problem windows, there must way solve problem. have ideas?

regards, jonniboy

could try modifying first version adding shell=true popen constructor?

import subprocess  # sc = start command sc = ['java', '-xmx1024m', '-djava.library.path="%appdata%\\.minecraft\\versions\\1.7.10\\1.7.10-natives"', '-cp', '"%appdata%\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.0-beta9\\log4j-api-2.0-beta9.jar;%appdata%\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.0-beta9\\log4j-core-2.0-beta9.jar;%appdata%\\.minecraft\\libraries\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar;%appdata%\\.minecraft\\libraries\\com\\mojang\\authlib\\1.3\\authlib-1.3.jar;%appdata%\\.minecraft\\libraries\\io\\netty\\netty-all\\4.0.10.final\\netty-all-4.0.10.final.jar;%appdata%\\.minecraft\\libraries\\java3d\\vecmath\\1.3.1\\vecmath-1.3.1.jar;%appdata%\\.minecraft\\libraries\\net\\sf\\trove4j\\trove4j\\3.0.3\\trove4j-3.0.3.jar;%appdata%\\.minecraft\\libraries\\net\\sf\\jopt-simple\\jopt-simple\\4.5\\jopt-simple-4.5.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar;%appdata%\\.minecraft\\libraries\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar;%appdata%\\.minecraft\\libraries\\com\\google\\guava\\guava\\15.0\\guava-15.0.jar;%appdata%\\.minecraft\\libraries\\org\\apache\\commons\\commons-lang3\\3.1\\commons-lang3-3.1.jar;%appdata%\\.minecraft\\libraries\\commons-io\\commons-io\\2.4\\commons-io-2.4.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jinput\\jinput-platform\\2.0.5\\jinput-platform-2.0.5-natives-windows.jar;%appdata%\\.minecraft\\libraries\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar;%appdata%\\.minecraft\\libraries\\com\\google\\code\\gson\\gson\\2.2.4\\gson-2.2.4.jar;%appdata%\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.0\\lwjgl-2.9.0.jar;%appdata%\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.0\\lwjgl_util-2.9.0.jar;%appdata%\\.minecraft\\versions\\1.7.10\\1.7.10.jar"', 'net.minecraft.client.main.main', '--username', '[username]', '--version', '1.7.10', '--gamedir', 'c:\\users\\jon\\appdata\\roaming\\.minecraft', '--assetsdir c:\\users\\jon\\appdata\\roaming\\.minecraft\\assets', '--accesstoken', '[accesstoken]', '--uuid', '[uuid]', '--userproperties', '{}', '--usertype', 'mojang'] p = subprocess.popen(sc, stdout = subprocess.pipe, stderr = subprocess.pipe, shell=true) while true:     o = p.stdout.readline()     e = p.stderr.readline()     if o:         print o     if e:         print e     if o or e:         pass     else:         break 

Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -