Files
Boris Lovosevic 4e4f1e8613 Fixed bug in spiffs causing crashes in ftp module when multiple subdirectories was used
Updated ftp module

Added option to force boot from factory partition based on the state of the defined gpio
Added option to activate the LED on defined gpio from bootloader, as boot indication

Updated SPI module
  fixed bug when initializing spi wothout CS specified

Added support for Power management and selecting CPU frequenca from MicroPython

Added support for Wake Stub during deepsleep
  Some new option to machine.deepsleep() added
  Updated wake_on_ext0() & wake_on_ext1 functions

Fixed bug in rtc.ntpsync(), not setting the time zone

Added getdrive() method to uos module

Updated machinne.Pin
  some improvements
  added all supported by ESP32 pin configuration

Updated 'upysh' frozen module
  'ls' function improved, now prints total and free drive space
  'cp' function added, copy file

Minor improvements and bug fixes

Added the toolchain for building on aarch64, thanks to John Cutler
2018-03-15 16:42:44 +01:00

188 lines
4.5 KiB
Python

import sys
import os
import time
class LS:
def __repr__(self):
self.__call__()
return ""
def __call__(self, path="."):
if path == "/":
l = os.listdir('/')
for f in l:
print(" <dir> %s" % (f))
return
if path == ".":
path = os.getcwd()
try:
st = os.stat(path)
except:
print("Not a directory")
return
if not (st[0] & 0x4000):
print("Not a directory")
return
origpath = os.getcwd()
os.chdir(path)
l = os.listdir()
l.sort()
total = 0
for f in l:
st = os.stat(f)
ftime = time.strftime("%Y/%m/%d %X", time.localtime(st[8]))
if st[0] & 0x4000: # stat.S_IFDIR
print(" <dir> %s %s" % (ftime, f))
else:
print("% 8d %s %s" % (st[6], ftime, f))
total += st[6]
drive = os.getdrive()
if drive != "/":
stvfs = os.statvfs(drive)
if total < (10*1024):
stotal = "{} B".format(total)
elif total < (1024*1024):
stotal = "{:0.2f} KB".format(total/1024)
else:
stotal = "{:0.3f} MB".format(total/(1024*1024))
print("\nTotal in '{}': {}".format(path, stotal))
dsize = stvfs[0]*stvfs[2]
dfree = stvfs[0]*stvfs[3]
if dsize < (1024*1024):
ssize = "{:0.2f} KB".format(dsize/(1024))
elif dsize < (1024*1024*1024):
ssize = "{:0.3f} MB".format(dsize/(1024*1024))
else:
ssize = "{:0.3f} GB".format(dsize/(1024*1024*1024))
if dfree < (1024*1024):
sfree = "{:0.2f} KB".format(dfree/(1024))
elif dsize < (1024*1024*1024):
sfree = "{:0.3f} MB".format(dfree/(1024*1024))
else:
sfree = "{:0.3f} GB".format(dfree/(1024*1024*1024))
print("Drive: '{}' size: {}, free: {}".format(drive, ssize, sfree))
os.chdir(origpath)
class PWD:
def __repr__(self):
return os.getcwd()
def __call__(self):
return self.__repr__()
class CLEAR:
def __repr__(self):
return "\x1b[2J\x1b[H"
def __call__(self):
return self.__repr__()
class CP:
def __repr__(self):
self.__call__()
return ""
def __call__(self, srcf, destf):
if srcf == destf:
print("Destination file must be different than source")
return
try:
st = os.stat(srcf)
except:
print("'{}' not found".format(srcf))
return
try:
st = os.stat(destf)
print("'{}' exists".format(destf))
return
except:
pass
try:
fs = open(srcf, 'rb')
try:
fd = open(destf, 'wb')
except:
fs.close()
print("Error opening '{}'".format(srcf))
return
try:
while True:
buf = fs.read(1024)
if len(buf) == 0:
break
else:
fd.write(buf)
except:
try:
fd.close()
os.remove(destf)
except:
pass
print("Error during copy")
fd.close()
fs.close()
except:
print("Error opening '{}'".format(srcf))
pwd = PWD()
ls = LS()
clear = CLEAR()
cp = CP()
cd = os.chdir
mkdir = os.mkdir
mv = os.rename
rm = os.remove
rmdir = os.rmdir
def head(f, n=10):
with open(f) as f:
for i in range(n):
l = f.readline()
if not l: break
sys.stdout.write(l)
def cat(f):
head(f, 1 << 30)
def newfile(path):
print("Type file contents line by line, finish with EOF (Ctrl+D).")
with open(path, "w") as f:
while 1:
try:
l = input()
except EOFError:
break
f.write(l)
f.write("\n")
class Man():
def __repr__(self):
return("""
upysh is intended to be imported using:
from upysh import *
To see this help text again, type "man".
upysh commands:
pwd, cd("new_dir"), ls, ls(...), head(...), cat(...)
newfile(...), mv("old", "new"), rm(...), mkdir(...), rmdir(...)
cp("from", "to")
clear
""")
man = Man()
print(man)