View Single Post
Old 07-21-2019, 07:10 AM
phonethihakyaw phonethihakyaw is offline
Registered User
Join Date: Jul 2019
Posts: 1
Unhappy Python Script Error In Linux

#$language = "python"
#$interface = "1.0"

# Description:
# Sends commands one by one as listed in the COMMANDS array to the
# remote machine. The results of each command are captured into a
# variable, and then written to an individual log file (one log file
# for each command). Once all the commands have been run, a file
# browser is launched, with the first command output file selected
# within the file browser window.
# Demonstrates:
# This example script demonstrates how to log the output of specific
# commands to separate files (one file for each command) without
# having to manually turn logging on before and off after running each
# command.
# This specific example doesn't use the logging script API to write
# data to a file. Instead, we use the ReadString() method to capture
# the result of each command and write it manually to a file of our
# choosing (LOG_FILE_TEMPLATE serves as a template for the file name
# which changes with each command that is issued to the remote. For
# example, the results of the first command will be written to a file
# named Command_01_Results.txt, the results of the 2nd command to
# Command_02_Results.txt, etc...).
# Specifically, this example automates the logging process by:
# - Using an array of commands that are to be sent to the remote
# system (COMMANDS)
# - Using SCRIPT_TAB.Screen.Send() to issue each command.
# - Using the SCRIPT_TAB.Screen.ReadString() method to not only wait
# for an indication that the command sent has been completed, but
# also capture all of the text received while the command was
# running.
# Note: This script assumes that SecureCRT is currently connected to the
# remote device prior to running this script. Otherwise, the script
# will exit with an error message.
# If you want this script to perform the connection sequence as
# well, simply replace the "if not SCRIPT_TAB.Session.Connected:"
# block within the main() function below with a line similar to
# the following:
# SCRIPT_TAB.Session.Connect("/S MySessionName")

import os
import subprocess

LOG_DIRECTORY = os.path.join(
os.path.expanduser('~'), 'LogOutputOfSpecificCommand')

LOG_FILE_TEMPLATE = os.path.join(
LOG_DIRECTORY, "Command_%(NUM)s_Results.txt")

SCRIPT_TAB = crt.GetScriptTab()

"ls -lR --color /tmp",
"ps -eaf | grep vshelld",
"tail -100 /var/log/messages",
# "sh run",
# "",
# "",

def main():

if not os.path.exists(LOG_DIRECTORY):

if not os.path.isdir(LOG_DIRECTORY):
"Log output directory %r is not a directory" % LOG_DIRECTORY)

if not SCRIPT_TAB.Session.Connected:
"Not Connected. Please connect before running this script.")

# Instruct WaitForString and ReadString to ignore escape sequences when
# detecting and capturing data received from the remote (this doesn't
# affect the way the data is displayed to the screen, only how it is handled
# by the WaitForString, WaitForStrings, and ReadString methods associated
# with the Screen object.
SCRIPT_TAB.Screen.IgnoreEscape = True
SCRIPT_TAB.Screen.Synchronous = True

# If this script is run as a login script, there will likely be data
# arriving from the remote system. This is one way of detecting when it's
# safe to start sending data. If this script isn't being run as a login
# script, then the worst it will do is seemingly pause for one second
# before determining what the prompt is.
# If you plan on supplying login information by waiting for username and
# password prompts within this script, do so right before this while loop.
while True:
if not SCRIPT_TAB.Screen.WaitForCursor(1):
# Once the cursor has stopped moving for about a second, we'll
# assume it's safe to start interacting with the remote system.

# Get the shell prompt so that we can know what to look for when
# determining if the command is completed. Won't work if the prompt
# is dynamic (e.g. changes according to current working folder, etc)
rowIndex = SCRIPT_TAB.Screen.CurrentRow
colIndex = SCRIPT_TAB.Screen.CurrentColumn - 1

prompt = SCRIPT_TAB.Screen.Get(rowIndex, 0, rowIndex, colIndex)
prompt = prompt.strip()

for (index, command) in enumerate(COMMANDS):
command = command.strip()

# Set up the log file for this specific command
logFileName = LOG_FILE_TEMPLATE % {"NUM" : NN(index + 1, 2)}

# Send the command text to the remote
SCRIPT_TAB.Screen.Send(command + '\r')

# Wait for the command to be echo'd back to us.
SCRIPT_TAB.Screen.WaitForString('\r', 1)
SCRIPT_TAB.Screen.WaitForString('\n', 1)

# Use the ReadString() method to get the text displayed while
# the command was runnning. Note also that the ReadString()
# method captures escape sequences sent from the remote machine
# as well as displayed text. As mentioned earlier in comments
# above, if you want to suppress escape sequences from being
# captured, set the Screen.IgnoreEscape property = True.
result = SCRIPT_TAB.Screen.ReadString(prompt)
result = result.strip()

filep = open(logFileName, 'wb+')

# If you don't want the command logged along with the results, comment
# out the very next line
filep.write("Results of command: " + command + os.linesep)

# Write out the results of the command to our log file
filep.write(result + os.linesep)

# Close the log file

# Once we're complete, let's bring up the directory containing the
# log files.

def LaunchViewer(filename):
except AttributeError:['open', filename])

def NN(number, digitCount):
# Normalizes a single digit number to have digitCount 0s in front of it
format = "%0" + str(digitCount) + "d"
return format % number


Dear Securecrt Developers,

Please help me to resolve this issue in my Linux because i can't run this script and it display OSError in Message box and can't save output works fine on Windows.
Reply With Quote