Écrivez comment créer un fichier wrapper dans un environnement Windows. Normalement, cela devrait être fait lors de l'exécution à partir d'une invite de commande ou autre. (En supposant que le PATH du répertoire contenant python.exe est en place)
C:\Users\testuser> python C:\Users\testUser\pyruntest.py
→pyruntest.le résultat de l'exécution py est sorti
Mais si vous n'avez pas associé python.exe à votre fichier .py, vous ne pouvez pas le faire.
C:\Users\testuser> pyruntest.py
→ Erreur
@echo off
%PYTHONPATH%\python.exe %~dp0\%~n0.py %*
Par exemple, si vous enregistrez ce qui précède avec le nom de fichier pyruntest.bat Vous pouvez exécuter pyruntest.py dans le même répertoire que pyruntest.bat comme suit:
C:> pyruntest.bat
→pyruntest.le résultat de l'exécution py est sorti
Vous pouvez aller de n'importe où si vous passez par Path Si vous ne souhaitez pas taper .bat, remplacez l'extension par .cmd.
C:> pyruntest
→pyruntest.le résultat de l'exécution py est sorti
Il n'y a généralement pas de problème avec la méthode 1, mais pour traiter plusieurs fichiers que vous souhaitez traiter comme arguments Lorsque je le glisse et le dépose sur .cmd, j'obtiens cette erreur.
Trop d'arguments de ligne de commande ont été spécifiés pour la commande. Spécifiez la valeur correcte et réessayez.
La cause est la limitation de cmd.exe? 2047 caractères ou 8191 caractères (WinXP ou version ultérieure) semble être le maximum. Powershell n'a pas cette limite, mais c'est encore plus épineux d'exécuter .ps1 avec un double clic. .. Quel pauvre terminal, je souhaite que Powershell, une invite de commande, disparaisse du monde. Il devrait être possible de le résoudre s'il est converti en exe.
La seule façon de l'utiliser dans un tel cas est peut-être d'utiliser le format d'exécution exe. Il existe plusieurs façons d'en faire un exe,
Après tout, je pensais le faire avec Javascript, mais j'étais frustré et j'ai décidé de le faire avec C #.
pyruntest.cs Je suis un débutant en C # et il y a beaucoup de choses que je ne comprends pas, mais j'ai déménagé donc je vais l'exposer.
using System;
using System.Diagnostics;
using System.ComponentModel;
class Program
{
static void Main(string[] args)
{
// Python Program Path
var pythonScriptPath = System.Reflection.Assembly.GetExecutingAssembly().Location.Replace(".exe", "") + ".py";
try
{
var startInfo = new ProcessStartInfo()
{
FileName = @"python.exe",
UseShellExecute = false,
Arguments = "\"" + pythonScriptPath + "\" \"" + string.Join("\" \"", args),
};
using (var process = Process.Start(startInfo))
{
process.WaitForExit();
}
}
catch (Win32Exception)
{
Console.WriteLine("python.L'exe n'a pas été trouvé. Ajouter à la variable d'environnement PATH");
}
}
}
La compilation avec csc.exe produit pyruntest.exe
C:\Users\testuser> C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe pyruntest.cs
C:\Users\testuser> pyruntest.exe
→pyruntest.le résultat de l'exécution py est sorti
C:\Users\testuser> pyruntest
→ Bien sûr, c'est toujours pyruntest.le résultat de l'exécution py est sorti
Si vous le donnez correctement via le chemin de la variable d'environnement, il peut être exécuté quel que soit le répertoire courant
C:\Users\testuser> set PATH=%PATH%;%CD%
C:\Users\testuser> setx PATH %PATH%
C:\Users\testuser> cd \
C:> pyruntest
→pyruntest.le résultat de l'exécution py est sorti
La méthode 1 et la méthode 2 ont un mécanisme commun, Spécifications communes pour la méthode d'exécution ci-dessus: Placez [Je veux exécuter] .bat ou [Je veux exécuter] .cmd ou [Je veux exécuter] .exe dans le même répertoire que [Je veux exécuter] .py. (Désormais, vous n'avez pas à modifier la source du wrapper à chaque fois)
A part) La raison pour laquelle je fais cela est que s'il s'agit d'un PC personnel, c'est fini si vous définissez l'association. Dans un environnement de client léger pour le travail, je ne pouvais pas modifier les paramètres sans autorisation, donc Vous aurez besoin d'un tel emballage de rond-point. C'est devenu un monde incommode.
Recommended Posts