__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import os.path
import platform
import shlex
import subprocess
import sys
def run_in_terminal(cmd, cwd, env_overrides={}, keep_open=True, title=None):
from thonny.running import get_environment_with_overrides
env = get_environment_with_overrides(env_overrides)
if not cwd or not os.path.exists(cwd):
cwd = os.getcwd()
if sys.platform == "win32":
_run_in_terminal_in_windows(cmd, cwd, env, keep_open, title)
elif sys.platform == "linux":
_run_in_terminal_in_linux(cmd, cwd, env, keep_open)
elif sys.platform == "darwin":
_run_in_terminal_in_macos(cmd, cwd, env_overrides, keep_open)
else:
raise RuntimeError("Can't launch terminal in " + platform.system())
def open_system_shell(cwd, env_overrides={}):
from thonny.running import get_environment_with_overrides
env = get_environment_with_overrides(env_overrides)
if sys.platform == "darwin":
_run_in_terminal_in_macos([], cwd, env_overrides, True)
elif sys.platform == "win32":
cmd = "start cmd"
subprocess.Popen(cmd, cwd=cwd, env=env, shell=True)
elif sys.platform == "linux":
cmd = _get_linux_terminal_command()
subprocess.Popen(cmd, cwd=cwd, env=env, shell=True)
else:
raise RuntimeError("Can't launch terminal in " + platform.system())
def _add_to_path(directory, path):
# Always prepending to path may seem better, but this could mess up other things.
# If the directory contains only one Python distribution executables, then
# it probably won't be in path yet and therefore will be prepended.
if (
directory in path.split(os.pathsep)
or sys.platform == "win32"
and directory.lower() in path.lower().split(os.pathsep)
):
return path
else:
return directory + os.pathsep + path
def _run_in_terminal_in_windows(cmd, cwd, env, keep_open, title=None):
if keep_open:
# Yes, the /K argument has weird quoting. Can't explain this, but it works
quoted_args = " ".join(map(lambda s: s if s == "&" else '"' + s + '"', cmd))
cmd_line = """start {title} /D "{cwd}" /W cmd /K "{quoted_args}" """.format(
cwd=cwd, quoted_args=quoted_args, title='"' + title + '"' if title else ""
)
subprocess.Popen(cmd_line, cwd=cwd, env=env, shell=True)
else:
subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_CONSOLE, cwd=cwd, env=env)
def _run_in_terminal_in_linux(cmd, cwd, env, keep_open):
def _shellquote(s):
return subprocess.list2cmdline([s])
term_cmd = _get_linux_terminal_command()
if isinstance(cmd, list):
cmd = " ".join(map(_shellquote, cmd))
if keep_open:
# http://stackoverflow.com/a/4466566/261181
core_cmd = "{cmd}; exec bash -i".format(cmd=cmd)
in_term_cmd = "bash -c {core_cmd}".format(core_cmd=_shellquote(core_cmd))
else:
in_term_cmd = cmd
if term_cmd == "lxterminal":
# https://www.raspberrypi.org/forums/viewtopic.php?t=221490
whole_cmd = "{term_cmd} --command={in_term_cmd}".format(
term_cmd=term_cmd, in_term_cmd=_shellquote(in_term_cmd)
)
else:
whole_cmd = "{term_cmd} -e {in_term_cmd}".format(
term_cmd=term_cmd, in_term_cmd=_shellquote(in_term_cmd)
)
if term_cmd == "terminator" and "PYTHONPATH" in env:
# it is written in Python 2 and the PYTHONPATH of Python 3 will confuse it
# https://github.com/thonny/thonny/issues/1129
del env["PYTHONPATH"]
subprocess.Popen(whole_cmd, cwd=cwd, env=env, shell=True)
def _run_in_terminal_in_macos(cmd, cwd, env_overrides, keep_open):
_shellquote = shlex.quote
cmds = "clear; cd " + _shellquote(cwd)
# osascript "tell application" won't change Terminal's env
# (at least when Terminal is already active)
# At the moment I just explicitly set some important variables
for key in env_overrides:
if env_overrides[key] is None:
cmds += "; unset " + key
else:
value = env_overrides[key]
if key == "PATH":
value = _normalize_path(value)
cmds += "; export {key}={value}".format(key=key, value=_shellquote(value))
if cmd:
if isinstance(cmd, list):
cmd = " ".join(map(_shellquote, cmd))
cmds += "; " + cmd
if not keep_open:
cmds += "; exit"
# try to shorten to avoid too long line https://github.com/thonny/thonny/issues/1529
common_prefix = os.path.normpath(sys.prefix).rstrip("/")
cmds = (
" export THOPR=" + common_prefix + " ; " + cmds.replace(common_prefix + "/", "$THOPR" + "/")
)
print(cmds)
# The script will be sent to Terminal with 'do script' command, which takes a string.
# We'll prepare an AppleScript string literal for this
# (http://stackoverflow.com/questions/10667800/using-quotes-in-a-applescript-string):
cmd_as_apple_script_string_literal = (
'"' + cmds.replace("\\", "\\\\").replace('"', '\\"').replace("$", "\\$") + '"'
)
# When Terminal is not open, then do script opens two windows.
# do script ... in window 1 would solve this, but if Terminal is already
# open, this could run the script in existing terminal (in undesirable env on situation)
# That's why I need to prepare two variations of the 'do script' command
doScriptCmd1 = """ do script %s """ % cmd_as_apple_script_string_literal
doScriptCmd2 = """ do script %s in window 1 """ % cmd_as_apple_script_string_literal
# The whole AppleScript will be executed with osascript by giving script
# lines as arguments. The lines containing our script need to be shell-quoted:
quotedCmd1 = subprocess.list2cmdline([doScriptCmd1])
quotedCmd2 = subprocess.list2cmdline([doScriptCmd2])
# Now we can finally assemble the osascript command line
cmd_line = (
"osascript"
+ """ -e 'if application "Terminal" is running then ' """
+ """ -e ' tell application "Terminal" ' """
+ """ -e """
+ quotedCmd1
+ """ -e ' activate ' """
+ """ -e ' end tell ' """
+ """ -e 'else ' """
+ """ -e ' tell application "Terminal" ' """
+ """ -e """
+ quotedCmd2
+ """ -e ' activate ' """
+ """ -e ' end tell ' """
+ """ -e 'end if ' """
)
subprocess.Popen(cmd_line, cwd=cwd, shell=True)
def _get_linux_terminal_command():
import shutil
xte = shutil.which("x-terminal-emulator")
if xte:
if os.path.realpath(xte).endswith("/lxterminal") and shutil.which("lxterminal"):
# need to know exact program, because it needs special treatment
return "lxterminal"
elif os.path.realpath(xte).endswith("/terminator") and shutil.which("terminator"):
# https://github.com/thonny/thonny/issues/1129
return "terminator"
else:
return "x-terminal-emulator"
# Older konsole didn't pass on the environment
elif shutil.which("konsole"):
if (
shutil.which("gnome-terminal")
and "gnome" in os.environ.get("DESKTOP_SESSION", "").lower()
):
return "gnome-terminal"
else:
return "konsole"
elif shutil.which("gnome-terminal"):
return "gnome-terminal"
elif shutil.which("xfce4-terminal"):
return "xfce4-terminal"
elif shutil.which("lxterminal"):
return "lxterminal"
elif shutil.which("xterm"):
return "xterm"
else:
raise RuntimeError("Don't know how to open terminal emulator")
def _normalize_path(s):
parts = s.split(os.pathsep)
return os.pathsep.join([os.path.normpath(part) for part in parts])
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| dbus | Folder | 0755 |
|
|
| locale | Folder | 0755 |
|
|
| plugins | Folder | 0755 |
|
|
| res | Folder | 0755 |
|
|
| test | Folder | 0755 |
|
|
| vendored_libs | Folder | 0755 |
|
|
| VERSION | File | 5 B | 0644 |
|
| __init__.py | File | 16.76 KB | 0644 |
|
| __main__.py | File | 78 B | 0644 |
|
| assistance.py | File | 34.12 KB | 0644 |
|
| ast_utils.py | File | 6.06 KB | 0644 |
|
| backend.py | File | 32.82 KB | 0644 |
|
| base_file_browser.py | File | 52.3 KB | 0644 |
|
| codeview.py | File | 21.33 KB | 0644 |
|
| common.py | File | 23.16 KB | 0644 |
|
| config.py | File | 6.27 KB | 0644 |
|
| config_ui.py | File | 5.57 KB | 0644 |
|
| defaults.ini | File | 335 B | 0644 |
|
| editor_helpers.py | File | 12.44 KB | 0644 |
|
| editors.py | File | 41.94 KB | 0644 |
|
| export.py | File | 1.52 KB | 0644 |
|
| first_run.py | File | 3.43 KB | 0644 |
|
| gridtable.py | File | 9.19 KB | 0644 |
|
| jedi_utils.py | File | 9.8 KB | 0644 |
|
| languages.py | File | 2.52 KB | 0644 |
|
| memory.py | File | 4.14 KB | 0644 |
|
| misc_utils.py | File | 19.55 KB | 0644 |
|
| roughparse.py | File | 32.96 KB | 0644 |
|
| rst_utils.py | File | 17.09 KB | 0644 |
|
| running.py | File | 56.77 KB | 0644 |
|
| shell.py | File | 78.13 KB | 0644 |
|
| terminal.py | File | 7.86 KB | 0644 |
|
| tktextext.py | File | 44.26 KB | 0644 |
|
| token_utils.py | File | 2.21 KB | 0644 |
|
| udisks.py | File | 4.8 KB | 0644 |
|
| ui_utils.py | File | 81.98 KB | 0644 |
|
| workbench.py | File | 96.77 KB | 0644 |
|
| workdlg.py | File | 16.27 KB | 0644 |
|