Problème allocation d'espace de tas de plus de 4 Go lors de l'appel java « de Python »

StackOverflow https://stackoverflow.com/questions/2000331

  •  18-09-2019
  •  | 
  •  

Question

J'utilise appel à l'aide os.system de python pour exécuter le fichier jar. Le fichier jar nécessite un grand espace de tas et donc je suis allouant un espace de tas 4 Gb utilisant Xmx. Quand j'exécutez la commande "Java -Xms4096m -Xmx4096m jar camXnet.jar NET.TXT" de la ligne de commande, il exécute correctement, mais quand je l'appelle d'un programme python via os.system, il ne fonctionne que si la mémoire allouée est inférieure à 4Gb, sinon il ne parvient pas à exécuter. Toute solution?

Par défaut à exécuter je veux dire qu'une fenêtre de commande apparaît indiquant que os.system a été appelé et il disparaît, je vais vérifier le code d'erreur si tout retourné. cependant aucun problème si l'on rencontre Xmx, XMS sont mis à la valeur inférieure.

Ok j'ai vérifié à la fois la version et il y a une différence celui qui est appelé par python est en mode mixte Java HotSpot client VM, partage tandis qu'un être appelé via la ligne de commande normale est Java HotSpot 64 bits serveur

Comment faire os.system en python appeler le bon qui est le serveur 64 bits.

Mise à jour: J'ai essayé d'utiliser le module subprocess encore la version de retour java est identique à celui de os.system

Était-ce utile?

La solution

Il est difficile d'être sûr sans le savoir plus de détails - comme qui vous êtes sur OS - mais je pense que vous utilisez une version 32 bits de Python qui signifie que lorsque vous lancez Java, vous obtenez également la version de 32 bits qui a une limite de taille de segment de mémoire de 4 Go.

Pour vérifier si tel est le cas, comparer la sortie de java -version lorsqu'il est exécuté à partir de la ligne de commande et lorsqu'il est exécuté à partir de votre script Python.

Autres conseils

Je faisais le même problème le lancement 64bit Java de python 32bit. J'ai résolu le problème en utilisant le suggestiong de Dave Webb de mettre le chemin complet 64bits Java.exe dans le script python. Cela a bien fonctionné il est donc pas nécessaire d'utiliser 64 bits Python

Juste une suggestion, mais essayez d'utiliser subprocess.call () au lieu de os.system (), on préfère et peut gérer la problème que vous rencontrez. Je suis curieux de savoir si elle fait ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top